first commit
This commit is contained in:
7
芳林公司项目/www.zhiyuanhelp.com/.gitignore
vendored
Normal file
7
芳林公司项目/www.zhiyuanhelp.com/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/.idea
|
||||
/.vscode
|
||||
/vendor
|
||||
*.log
|
||||
thinkphp
|
||||
.env
|
||||
.DS_Store
|
||||
1
芳林公司项目/www.zhiyuanhelp.com/.pydio
Normal file
1
芳林公司项目/www.zhiyuanhelp.com/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
20c296fb-a66b-489a-9fc0-8a2774ad8236
|
||||
42
芳林公司项目/www.zhiyuanhelp.com/.travis.yml
Normal file
42
芳林公司项目/www.zhiyuanhelp.com/.travis.yml
Normal file
@@ -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
|
||||
927
芳林公司项目/www.zhiyuanhelp.com/CHANGELOG.md
Normal file
927
芳林公司项目/www.zhiyuanhelp.com/CHANGELOG.md
Normal file
@@ -0,0 +1,927 @@
|
||||
## V5.1.39 LTS(2019-11-18)
|
||||
|
||||
本次更新为常规更新,主要包括:
|
||||
|
||||
* 修正`memcached`驱动
|
||||
* 改进`HasManyThrough`关联查询
|
||||
* 改进`Request`类`isJson`方法
|
||||
* 改进关联查询
|
||||
* 改进`redis`驱动
|
||||
* 增加 Model类`getWhere`方法对复合主键的支持
|
||||
* 改进`newQuery`方法
|
||||
* 改进闭包查询的参数绑定
|
||||
* 修正`Validate`
|
||||
* 修复某些情况下URL会多一个冒号
|
||||
* 调整composer.json
|
||||
* 修复使用`Cache::clear()`时,报错缓存文件不存在问题
|
||||
* 使用File类的unlink方法进行文件删除
|
||||
* 改进`paraseData`方法
|
||||
* 修正image验证方法
|
||||
* 改进Url生成
|
||||
* 改进空操作对数字的支持
|
||||
* 改进一处PHP7.4兼容性问题
|
||||
|
||||
## V5.1.38 LTS(2019-8-8)
|
||||
|
||||
本次更新为常规更新,主要包括:
|
||||
|
||||
* `Request`类增加`isJson`方法
|
||||
* 改进浮点型查询
|
||||
* 修正关联查询关联外键为空的查询错误
|
||||
* 远程一对多支持关联统计和预载入查询
|
||||
* 远程一对多关联支持`has`/`hasWhere`查询
|
||||
* 优化`parseIn`解析
|
||||
* 改进`parseLike`查询
|
||||
* 改进Url生成
|
||||
* 改进模型的`toArray`方法
|
||||
* 修正`notIn`查询
|
||||
* 改进`JSON`字段查询
|
||||
* 改进Controller类`display`/`fetch`方法返回`ViewResponse`对象
|
||||
* 改进`param`方法
|
||||
* 改进`mysql`驱动`getExplain`方法
|
||||
* 改进时间查询
|
||||
* 改进模型关联的`has`/`hasWhere`方法对软删除的支持
|
||||
* 修正社区反馈的BUG
|
||||
|
||||
## V5.1.37 LTS(2019-5-26)
|
||||
|
||||
本次更新为常规更新,主要更新如下:
|
||||
|
||||
* 改进关联数据更新
|
||||
* 修正关联动态获取器
|
||||
* 改进`redis`驱动
|
||||
* 修复验证规则里面出现二维数组时的错误
|
||||
* 改进跨域请求支持
|
||||
* 完善模型`hidden`方法对关联属性的支持
|
||||
* 改进`where`查询方法传入`Query`对象的支持`bind`数据
|
||||
* 改进数据集对象的`load`方法
|
||||
* 修正缓存类`clear`方法对`tag`的支持
|
||||
|
||||
## V5.1.36 LTS(2019-4-28)
|
||||
|
||||
本次更新为常规更新,主要更新如下:
|
||||
|
||||
* 修正`chunk`方法一处异常抛出的错误
|
||||
* 修正模型输出的`visible`
|
||||
* 改进环境变量加载
|
||||
* 改进命令行日志的`level`配置支持
|
||||
* 修复设置有缓存前缀时,无法清空缓存标签的问题
|
||||
* HasMony对象`saveAll`方法兼容`Collection`格式参数格式
|
||||
* 修正`whereOr`查询使用字符串的问题
|
||||
* 改进`dateFormat`设置对写入数据的影响
|
||||
* 修正查询缓存
|
||||
* 记住指定的跳转地址
|
||||
* 改进软删除
|
||||
* 改进聚合查询SQL去除limit 1
|
||||
* 改进缓存驱动
|
||||
|
||||
## V5.1.35 LTS(2019-3-2)
|
||||
|
||||
本次主要为常规更新,修正了一些反馈的问题。
|
||||
|
||||
* 修正验证类自定义验证方法执行两次的问题
|
||||
* 模型增加`isEmpty`方法用于判断是否空模型
|
||||
* 改进获取器对`append`的支持
|
||||
* 修正一对多关联的`withCount`自关联问题
|
||||
* facade类注释调整
|
||||
* 改进关联属性的`visible`和`hidden`判断
|
||||
* 修正路由分组的`MISS`路由
|
||||
* 改进pgsql.sql
|
||||
|
||||
## V5.1.34 LTS(2019-1-30)
|
||||
|
||||
本次更新为常规更新,修正了一些反馈的问题。
|
||||
|
||||
* 改进Request类的`has`方法,支持`patch`
|
||||
* 改进`unique`验证的多条件支持
|
||||
* 修复自定义上传验证,检测文件大小
|
||||
* 改进`in`查询支持表达式
|
||||
* 改进路由的`getBind`方法
|
||||
* 改进验证类的错误信息获取
|
||||
* 改进`response`助手函数默认值
|
||||
* 修正mysql的`regexp`查询
|
||||
* 改进模型类型强制转换写入对`Expression`对象的支持
|
||||
|
||||
## V5.1.33 LTS(2019-1-16)
|
||||
|
||||
* 修复路由中存在多个相同替换的正则BUG
|
||||
* 修正whereLike查询
|
||||
* join方法支持参数绑定
|
||||
* 改进union方法
|
||||
* 修正多对多关联的attach方法
|
||||
* 改进验证类的正则规则自定义
|
||||
* 改进Request类method方法
|
||||
* 改进File日志类型的CLI日志写入
|
||||
* 改进文件日志time_format配置对JSON格式的支持
|
||||
|
||||
## V5.1.32 LTS(2018-12-24)
|
||||
|
||||
本次主要为常规更新,修正了一些反馈的问题。
|
||||
|
||||
|
||||
* 改进多对多关联的`attach`方法
|
||||
* 改进聚合查询的`field`处理
|
||||
* 改进关联的`save`方法
|
||||
* 修正模型`exists`方法返回值
|
||||
* 改进时间字段写入和输出
|
||||
* 改进控制器中间件的调用
|
||||
* 改进路由变量替换的性能
|
||||
* 改进缓存标签的处理机制
|
||||
|
||||
## V5.1.31 LTS (2018-12-9)
|
||||
|
||||
本次版本包含一个安全更新,建议升级。
|
||||
|
||||
* 改进`field`方法
|
||||
* 改进`count`方法返回类型
|
||||
* `download`函数增加在浏览器中显示文件功能
|
||||
* 修正多对多模型的中间表数据写入
|
||||
* 改进`sqlsrv`驱动支持多个Schemas模式查询
|
||||
* 统一助手函数与\think\response\Download函数文件过期时间
|
||||
* 完善关联模型的`save`方法 增加`make`方法仅创建对象不保存
|
||||
* 修改条件表达式对静态变量的支持
|
||||
* 修正控制器名获取
|
||||
* 改进view方法的`field`解析
|
||||
|
||||
## V5.1.30 LTS(2018-11-30)
|
||||
|
||||
该版本为常规更新,修正了一些社区反馈的问题。
|
||||
|
||||
主要更新如下:
|
||||
|
||||
* 改进查询类的`execute`方法
|
||||
* 判断路由规则定义添加对请求类型的判断
|
||||
* 修复`orderRaw`异常
|
||||
* 修正 `optimize:autoload`指令
|
||||
* 改进软删除的`destroy`方法造成重复执行事件的问题
|
||||
* 改进验证类对扩展验证规则 始终验证 不管是否`require`
|
||||
* 修复自定义验证`remove`所有规则的异常
|
||||
* 改进时间字段的自动写入支持微秒数据
|
||||
* 改进`Connection`类的`getrealsql`方法
|
||||
* 修正`https`地址的URL生成
|
||||
* 修复 `array_walk_recursive` 在低于PHP7.1消耗内部指针问题
|
||||
* 改进手动参数绑定使用
|
||||
* 改进聚合查询方法的`field`参数支持`Expression`
|
||||
|
||||
## V5.1.29 LTS(2018-11-11)
|
||||
|
||||
该版本主要改进了参数绑定的解析问题和提升性能,并修正了一些反馈的问题。
|
||||
|
||||
* 改进手动参数绑定
|
||||
* 修正MISS路由的分组参数无效问题
|
||||
* 行为支持对象的方法
|
||||
* 修正全局查询范围
|
||||
* 改进`belongsto`关联的`has`方法
|
||||
* 改进`hasMany`关联
|
||||
* 改进模型观察者多次注册的问题
|
||||
* 改进`query`类的默认查询参数处理
|
||||
* 修正`parseBetween`解析方法
|
||||
* 改进路由地址生成的本地域名支持
|
||||
* 改进参数绑定的实际URL解析性能
|
||||
* 改进`Env`类的`getEnv`和`get`方法
|
||||
* 改进模板缓存的生成优化
|
||||
* 修复验证类的多语言支持
|
||||
* 修复自定义场景验证`remove`规则异常
|
||||
* File类添加是否自动补全扩展名的选项
|
||||
* 改进`strpos`对子串是否存在的判断
|
||||
* 修复`choice`无法用值选择第一个选项问题
|
||||
* 验证器支持多维数组取值验证
|
||||
* 改进解析`extend`和`block`标签的正则
|
||||
|
||||
## V5.1.28 LTS(2018-10-29)
|
||||
|
||||
该版本主要修正了上一个版本存在的一些问题,并改进了关联查询
|
||||
|
||||
* 改进聚合查询方法的字段支持DISTINCT
|
||||
* 改进定义路由后url函数的端口生成
|
||||
* 改进控制器中间件对`swoole`等的支持
|
||||
* 改进Log类`save`方法
|
||||
* 改进验证类的闭包验证参数
|
||||
* 多对多关联支持指定中间表数据的名称
|
||||
* 关联聚合查询支持闭包方式指定聚合字段
|
||||
* 改进Lang类`get`方法
|
||||
* 多对多关联增加判断关联数据是否存在的方法
|
||||
* 改进关联查询使用`fetchsql`的情况
|
||||
* 改进修改器的是否已经执行判断
|
||||
* 增加`afterWith`和`beforeWith`验证规则 用于比较日期字段
|
||||
|
||||
## V5.1.27 LTS(2018-10-22)
|
||||
|
||||
该版本主要修正了路由绑定的参数,改进了修改器的执行多次问题,并正式宣布为LTS版本!
|
||||
|
||||
|
||||
* 修正路由绑定的参数丢失问题
|
||||
* 修正路由别名的参数获取
|
||||
* 改进修改器会执行多次的问题
|
||||
|
||||
## V5.1.26(2018-10-12)
|
||||
|
||||
该版本主要修正了上一个版本的一些问题,并改进了全局查询范围的支持,同时包含了一个安全更新。
|
||||
|
||||
|
||||
* 修正单一模块下注解路由无效的问题
|
||||
* 改进数据库的聚合查询的字段处理
|
||||
* 模型类增加`globalScope`属性定义 用于指定全局的查询范围
|
||||
* 模型的`useGlobalScope`方法支持传入数组 用于指定当前查询需要使用的全局查询范围
|
||||
* 改进数据集的`order`方法对数字类型的支持
|
||||
* 修正上一个版本`order`方法解析的一处BUG
|
||||
* 排序字段不合法或者错误的时候抛出异常
|
||||
* 改进`Request`类的`file`方法对上传文件的错误判断
|
||||
|
||||
## V5.1.25(2018-9-21)
|
||||
|
||||
该版本主要改进了查询参数绑定的性能和对浮点型的支持,以及一些细节的完善。
|
||||
|
||||
* 修正一处命令行问题
|
||||
* 改进`Socketlog`日志驱动,支持自定义默认展开日志类别
|
||||
* 修正`MorphMany`一处bug
|
||||
* 跳转到上次记住的url,并支持默认值
|
||||
* 改进模型的异常提示
|
||||
* 改进参数绑定对浮点型的支持
|
||||
* 改进`order`方法解析
|
||||
* 改进`json`字段数据的自动编码
|
||||
* 改进日志`log_write`可能造成的日志写入死循环
|
||||
* Log类增加`log_level`行为标签位置,用于对某个类型的日志进行处理
|
||||
* Route类增加`clear`方法清空路由规则
|
||||
* 分布式数据库配置支持使用数组
|
||||
* 单日志文件也支持`max_files`参数
|
||||
* 改进查询参数绑定的性能
|
||||
* 改进别名路由的URL后缀参数检测
|
||||
* 控制器前置方法和控制器中间件的`only`和`except`定义不区分大小写
|
||||
|
||||
## V5.1.24(2018-9-5)
|
||||
|
||||
该版本主要增加了命令行的表格输出功能,并增加了查看路由定义的指令,以及修正了社区的一些反馈问题。
|
||||
|
||||
* 修正`Request`类的`file`方法
|
||||
* 修正路由的`cache`方法
|
||||
* 修正路由缓存的一处问题
|
||||
* 改进上传文件获取的异常处理
|
||||
* 改进`fetchCollection`方法支持传入数据集类名
|
||||
* 修正多级控制器的注解路由生成
|
||||
* 改进`Middleware`类`clear`方法
|
||||
* 增加`route:list`指令用于[查看定义的路由](752690) 并支持排序
|
||||
* 命令行增加`Table`输出类
|
||||
* `Command`类增加`table`方法用于输出表格
|
||||
* 改进搜索器查询方法支持别名定义
|
||||
* 命令行配置增加`auto_path`参数用于定义自动载入的命令类路径
|
||||
* 增加`make:command`指令用于[快速生成指令](354146)
|
||||
* 改进`make:controller`指令对操作方法后缀的支持
|
||||
* 改进命令行的定义文件支持索引数组 用于指令对象的惰性加载
|
||||
* 改进`value`和`column`方法对后续查询结果的影响
|
||||
* 改进`RuleName`类的`setRule`方法
|
||||
|
||||
## V5.1.23(2018-8-23)
|
||||
|
||||
该版本主要改进了数据集对象的处理,增加了`findOrEmpty`方法,并且修正了一些社区反馈的BUG。
|
||||
|
||||
* 数据集类增加`diff`/`intersect`方法用于获取差集和交集(默认根据主键值比较)
|
||||
* 数据集类增加`order`方法支持指定字段排序
|
||||
* 数据集类增加`map`方法使用回调函数处理数据并返回新的数据集对象
|
||||
* Db增加`allowEmpty`方法允许`find`方法在没有数据的时候返回空数组或者空模型对象而不是null
|
||||
* Db增加`findOrEmpty`方法
|
||||
* Db增加`fetchCollection`方法用于指定查询返回数据集对象
|
||||
* 改进`order`方法的数组方式解析,增强安全性
|
||||
* 改进`withSearch`方法,支持第三个参数传入字段前缀标识,用于多表查询字段搜索
|
||||
* 修正`optimize:route`指令开启类库后缀后的注解路由生成
|
||||
* 修正redis缓存及session驱动
|
||||
* 支持指定`Yaconf`的独立配置文件
|
||||
* 增加`yaconf`助手函数用于配置文件
|
||||
|
||||
|
||||
## V5.1.22(2018-8-9)
|
||||
|
||||
该版本主要增加了模型搜索器和`withJoin`方法,完善了模型输出和对`Yaconf`的支持,修正了一些社区反馈的BUG。
|
||||
|
||||
* 改进一对一关联的`table`识别问题
|
||||
* 改进内置`Facade`类
|
||||
* 增加`withJoin`方法支持`join`方式的[一对一关联](一对一关联.md)查询
|
||||
* 改进`join`预载入查询的空数据问题
|
||||
* 改进`Config`类的`load`方法支持快速加载配置文件
|
||||
* 改进`execute`方法和事务的断线重连
|
||||
* 改进`memcache`驱动的`has`方法
|
||||
* 模型类支持定义[搜索器](搜索器.md)方法
|
||||
* 完善`Config`类对`Yaconf`的支持
|
||||
* 改进模型的`hidden/visible/append/withAttr`方法,支持在[查询前后调用](数组访问.md),以及支持数据集对象
|
||||
* 数据集对象增加`where`方法根据字段或者关联数据[过滤数据](模型数据集.md)
|
||||
* 改进AJAX请求的`204`判断
|
||||
|
||||
|
||||
## V5.1.21(2018-8-2)
|
||||
|
||||
该版本主要增加了下载响应对象和数组查询对象的支持,并修正了一些社区反馈的问题。
|
||||
|
||||
* 改进核心对象的无用信息调试输出
|
||||
* 改进模型的`isRelationAttr`方法判断
|
||||
* 模型类的`get`和`all`方法并入Db类
|
||||
* 增加[下载响应对象](文件下载.md)和`download`助手函数
|
||||
* 修正别名路由配置定义读取
|
||||
* 改进`resultToModel`方法
|
||||
* 修正开启类库后缀后的注解路由生成
|
||||
* `Response`类增加`noCache`快捷方法
|
||||
* 改进路由对象在`Swoole`/`Workerman`下面参数多次合并问题
|
||||
* 修正路由`ajax`/`pjax`参数后路由变量无法正确获取的问题
|
||||
* 增加清除中间件的方法
|
||||
* 改进依赖注入的参数规范自动识别(便于对接前端小写+下划线规范)
|
||||
* 改进`hasWhere`的数组条件的字段判断
|
||||
* 增加[数组查询对象](高级查询.md)`Where`支持(喜欢数组查询的福音)
|
||||
* 改进多对多关联的闭包支持
|
||||
|
||||
## V5.1.20(2018-7-25)
|
||||
|
||||
该版本主要增加了Db和模型的动态获取器的支持,并修正了一些已知问题。
|
||||
|
||||
* Db类添加[获取器支持](703981)
|
||||
* 支持模型及关联模型字段[动态定义获取器](354046)
|
||||
* 动态获取器支持`JSON`字段
|
||||
* 改进路由的`before`行为执行(匹配后执行)
|
||||
* `Config`类支持`Yaconf`
|
||||
* 改进Url生成的端口问题
|
||||
* Request类增加`setUrl`和`setBaseUrl`方法
|
||||
* 改进页面trace的信息显示
|
||||
* 修正`MorphOne`关联
|
||||
* 命令行添加[查看版本指令](703994)
|
||||
|
||||
## V5.1.19 (2018-7-13)
|
||||
|
||||
该版本是一个小幅改进版本,针对`Swoole`和`Workerman`的`Cookie`支持做了一些改进,并修正了一些已知的问题。
|
||||
|
||||
|
||||
* 改进query类`delete`方法对软删除条件判断
|
||||
* 修正分表查询的软删除问题
|
||||
* 模型查询的时候同时传入`table`和`name`属性
|
||||
* 容器类增加`IteratorAggregate`和`Countable`接口支持
|
||||
* 路由分组支持对下面的资源路由统一设置`only/except/vars`参数
|
||||
* 改进Cookie类更好支持扩展
|
||||
* 改进Request类`post`方法
|
||||
* 改进模型自关联的自动识别
|
||||
* 改进Request类对`php://input`数据的处理
|
||||
|
||||
|
||||
## V5.1.18 (2018-6-30)
|
||||
|
||||
该版本主要完善了对`Swoole`和`Workerman`的`HttpServer`运行支持,改进`Request`类,并修正了一些已知的问题。
|
||||
|
||||
* 改进关联`append`方法的处理
|
||||
* 路由初始化和检测方法分离
|
||||
* 修正`destroy`方法强制删除
|
||||
* `app_init`钩子位置移入`run`方法
|
||||
* `think-swoole`扩展更新到2.0版本
|
||||
* `think-worker`扩展更新到2.0版本
|
||||
* 改进Url生成的域名自动识别
|
||||
* `Request`类增加`setPathinfo`方法和`setHost`方法
|
||||
* `Request`类增加`withGet`/`withPost`/`withHeader`/`withServer`/`withCookie`/`withEnv`方法进行赋值操作
|
||||
* Route类改进`host`属性的获取
|
||||
* 解决注解路由配置不生效的问题
|
||||
* 取消Test日志驱动,改为使用`close`设置关闭全局日志写入
|
||||
* 修正路由的`response`参数
|
||||
* 修正204响应输出的判断
|
||||
|
||||
## V5.1.17 (2018-6-18)
|
||||
|
||||
该版本主要增加了控制器中间件的支持,改进了路由功能,并且修正了社区反馈的一些问题。
|
||||
|
||||
* 修正软删除的`delete`方法
|
||||
* 修正Query类`Count`方法
|
||||
* 改进多对多`detach`方法
|
||||
* 改进Request类`Session`方法
|
||||
* 增加控制器中间件支持
|
||||
* 模型类增加`jsonAssoc`属性用于定义json数据是否返回数组
|
||||
* 修正Request类`method`方法的请求伪装
|
||||
* 改进静态路由的匹配
|
||||
* 分组首页路由自动完整匹配
|
||||
* 改进sqlsrv的`column`方法
|
||||
* 日志类的`apart_level`配置支持true自动生成对应类型的日志文件
|
||||
* 改进`204`输出判断
|
||||
* 修正cli下页面输出的BUG
|
||||
* 验证类使用更高效的`ctype`验证机制
|
||||
* 改进Request类`cookie`方法
|
||||
* 修正软删除的`withTrashed`方法
|
||||
* 改进多态一对多的预载入查询
|
||||
* 改进Query类`column`方法的缓存读取
|
||||
* Query类增加`whereBetweenTimeField`方法
|
||||
* 改进分组下多个相同路由规则的合并匹配问题
|
||||
* 路由类增加`getRule`/`getRuleList`方法获取定义的路由
|
||||
|
||||
## V5.1.16 (2018-6-7)
|
||||
|
||||
该版本主要修正了社区反馈的一些问题,并对Request类做了进一步规范和优化。
|
||||
|
||||
* 改进Session类的`boot`方法
|
||||
* App类的初始化方法可以单独执行
|
||||
* 改进Request类的`param`方法
|
||||
* 改进资源路由的变量替换
|
||||
* Request类增加`__isset`方法
|
||||
* 改进`useGlobalScope`方法对软删除的影响
|
||||
* 修正命令行调用
|
||||
* 改进Cookie类`init`方法
|
||||
* 改进多对多关联删除的返回值
|
||||
* 一对多关联写入支持`replace`
|
||||
* 路由增加`filter`检测方法,用于通过请求参数检测路由是否匹配
|
||||
* 取消Request类`session/env/server`方法的`filter`参数
|
||||
* 改进关联的指定属性输出
|
||||
* 模型删除操作删除后不清空对象数据仅作标记
|
||||
* 调整模型的`save`方法返回值为布尔值
|
||||
* 修正Request类`isAjax`方法
|
||||
* 修正中间件的模块配置读取
|
||||
* 取消Request类的请求变量的设置功能
|
||||
* 取消请求变量获取的默认修饰符
|
||||
* Request类增加`setAction/setModule/setController`方法
|
||||
* 关联模型的`delete`方法调用Query类
|
||||
* 改进URL生成的域名识别
|
||||
* 改进URL检测对已定义路由的域名判断
|
||||
* 模型类增加`isExists`和`isForce`方法
|
||||
* 软删除的`destroy`和`restore`方法返回值调整为布尔值
|
||||
|
||||
## V5.1.15 (2018-6-1)
|
||||
|
||||
该版本主要改进了路由缓存的性能和缓存方式设置,增加了JSON格式文件日志的支持,并修正了社区反馈的一些问题。
|
||||
|
||||
* 容器类增加`exists`方法 仅判断是否存在对象实例
|
||||
* 取消配置类的`autoload`方法
|
||||
* 改进路由缓存大小提高性能
|
||||
* 改进Dispatch类`init`方法
|
||||
* 增加`make:validate`指令生成验证器类
|
||||
* Config类`get`方法支持默认值参数
|
||||
* 修正字段缓存指令
|
||||
* 改进App类对`null`数据的返回
|
||||
* 改进模型类的`__isset`方法判断
|
||||
* 修正`Query`类的`withAggregate`方法
|
||||
* 改进`RuleItem`类的`setRuleName`方法
|
||||
* 修正依赖注入和参数的冲突问题
|
||||
* 修正Db类对第三方驱动的支持
|
||||
* 修正模型类查询对象问题
|
||||
* 修正File缓存驱动的`has`方法
|
||||
* 修正资源路由嵌套
|
||||
* 改进Request类对`$_SERVER`变量的读取
|
||||
* 改进请求缓存处理
|
||||
* 路由缓存支持指定单独的缓存方式和参数
|
||||
* 修正资源路由的中间件多次执行问题
|
||||
* 修正`optimize:config`指令
|
||||
* 文件日志支持`JSON`格式日志保存
|
||||
* 修正Db类`connect`方法
|
||||
* 改进Log类`write`方法不会自动写入之前日志
|
||||
* 模型的关联操作默认启用事务
|
||||
* 改进软删除的事件响应
|
||||
|
||||
## V5.1.14 (2018-5-18)
|
||||
|
||||
该版本主要对底层容器进行了一些优化改进,并增加了路由缓存功能,可以进一步提升路由性能。
|
||||
|
||||
* 依赖注入的对象参数传入改进
|
||||
* 改进核心类的容器实例化
|
||||
* 改进日期字段的读取
|
||||
* 改进验证类的`getScene`方法
|
||||
* 模型的`create`方法和`save`方法支持`replace`操作
|
||||
* 改进`Db`类的调用机制
|
||||
* App类调整为容器类
|
||||
* 改进容器默认绑定
|
||||
* `Loader`类增加工厂类的实例化方法
|
||||
* 增加路由变量默认规则配置参数
|
||||
* 增加路由缓存设计
|
||||
* 错误处理机制改进
|
||||
* 增加清空路由缓存指令
|
||||
|
||||
|
||||
## V5.1.13 (2018-5-11)
|
||||
|
||||
该版本主要增加了MySQL的XA事务支持,模型事件支持观察者,以及对Facade类的改进。
|
||||
|
||||
* 改进自动缓存
|
||||
* 改进Url生成
|
||||
* 修正数据缓存
|
||||
* 修正`value`方法的缓存
|
||||
* `join`方法和`view`方法的条件支持使用`Expression`对象
|
||||
* 改进驱动的`parseKey`方法
|
||||
* 改进Request类`host`方法和`domain`方法对端口的处理
|
||||
* 模型增加`withEvent`方法用于控制当前操作是否需要执行模型事件
|
||||
* 模型`setInc/setDec`方法支持更新事件
|
||||
* 模型添加`before_restore/after_restore`事件
|
||||
* 增加模型事件观察者
|
||||
* 路由增加`mobile`方法设置是否允许手机访问
|
||||
* 数据库XA事务支持
|
||||
* 改进索引数组查询对`IN`查询的支持
|
||||
* 修正`invokeMethod`方法
|
||||
* 修正空数据写入返回值的BUG
|
||||
* redis驱动支持`predis`
|
||||
* 改进`parseData`方法
|
||||
* 改进模块加载
|
||||
* App类初始化方法调整
|
||||
* 改进数组查询对表达式`Expression`对象支持
|
||||
* 改进闭包的依赖注入调用
|
||||
* 改进多对多关联的中间表模型更新
|
||||
* 增加容器中对象的自定义实例化
|
||||
|
||||
## V5.1.12 (2018-4-25)
|
||||
|
||||
该版本主要改进了主从查询的及时性,并支持动态设置请求数据。
|
||||
|
||||
* 支持动态设置请求数据
|
||||
* 改进`comment`方法解析
|
||||
* 修正App类`__unset`方法
|
||||
* 改进url生成的域名绑定
|
||||
* 改进主从查询的及时性
|
||||
* 修正`value`的数据缓存功能
|
||||
* 改进分页类的集合对象方法调用
|
||||
* 改进Db类的代码提示
|
||||
* SQL日志增加主从标记
|
||||
|
||||
## V5.1.11 (2018-4-19)
|
||||
|
||||
该版本为安全和修正版本,改进了JSON查询的参数绑定问题和容器类对象实例获取,并包含一处可能的安全隐患,建议更新。
|
||||
|
||||
* 支持指定JSON数据查询的字段类型
|
||||
* 修正`selectInsert`方法
|
||||
* `whereColumn`方法支持数组方式
|
||||
* 改进容器类`make`方法
|
||||
* 容器类`delete`方法支持数组
|
||||
* 改进`composer`自动加载
|
||||
* 改进模板引擎
|
||||
* 修正`like`查询的一处安全隐患
|
||||
|
||||
## V5.1.10 (2018-4-16)
|
||||
|
||||
该版本为修正版本,修正上一个版本的一些BUG,并增强了`think clear`指令。
|
||||
|
||||
* 改进`orderField`方法
|
||||
* 改进`exists`查询
|
||||
* 修改cli模式入口文件位置计算
|
||||
* 修正`null`查询
|
||||
* 改进`parseTime`方法
|
||||
* 修正关联预载入查询
|
||||
* 改进`mysql`驱动
|
||||
* 改进`think clear`指令 支持 `-c -l -r `选项
|
||||
* 改进路由规则对`/`结尾的支持
|
||||
|
||||
## V5.1.9 (2018-4-12)
|
||||
|
||||
该版本主要是一些改进和修正,并包含一个安全更新,是一个推荐更新版本。
|
||||
|
||||
* 默认模板渲染规则支持配置保持操作方法名
|
||||
* 改进`Request`类的`ip`方法
|
||||
* 支持模型软删除字段的默认值定义
|
||||
* 改进路由变量规则对中文的支持
|
||||
* 使用闭包查询的时候使用`cache(true)` 抛出异常提示
|
||||
* 改进`Loader`类`loadComposerAutoloadFiles`方法
|
||||
* 改进查询方法安全性
|
||||
* 修正路由地址中控制器名驼峰问题
|
||||
* 调整上一个版本的`module_init`和`app_begin`的钩子顺序问题
|
||||
* 改进CLI命令行执行的问题
|
||||
* 修正社区反馈的其它问题
|
||||
|
||||
## V5.1.8 (2018-4-5)
|
||||
|
||||
该版本主要改进了中间件的域名和模块支持,并同时修正了几个已知问题。
|
||||
|
||||
* 增加`template.auto_rule` 参数设置默认模板渲染的操作名自动转换规则
|
||||
* 默认模板渲染规则改由视图驱动实现
|
||||
* 修正路由标识定义
|
||||
* 修正控制器路由方法
|
||||
* 改进Request类`ip`方法支持自定义代理IP参数
|
||||
* 路由注册中间件支持数组方式别名
|
||||
* 改进命令行执行下的`composer`自动加载
|
||||
* 添加域名中间件注册支持
|
||||
* 全局中间件支持模块定义文件
|
||||
* Log日志配置支持`close`参数可以全局关闭日志写入
|
||||
* 中间件方法中捕获`HttpResponseException`异常
|
||||
* 改进中间件的闭包参数传入
|
||||
* 改进分组路由的延迟解析
|
||||
* 改进URL生成对域名绑定的支持
|
||||
* 改进文件缓存和文件日志驱动的并发支持
|
||||
|
||||
## V5.1.7 (2018-3-28)
|
||||
|
||||
该版本主要修正了路由的一些问题,并改进了查询的安全性。
|
||||
|
||||
* 支持`middleware`配置文件预先定义中间件别名方便路由调用
|
||||
* 修正资源路由
|
||||
* 改进`field`方法 自动识别`fieldRaw`
|
||||
* 增加`Expression`类
|
||||
* Query类增加`raw`方法
|
||||
* Query类的`field`/ `order` 和` where`方法都支持使用`raw`表达式查询
|
||||
* 改进`inc/dec`查询 支持批量更新
|
||||
* 改进路由分组
|
||||
* 改进Response类`create`方法
|
||||
* 改进composer自动加载
|
||||
* 修正域名路由的`append`方法
|
||||
* 修正操作方法的初始化方法获取不到问题
|
||||
|
||||
## V5.1.6 (2018-3-26)
|
||||
|
||||
该版本主要改进了路由规则的匹配算法,大幅提升了路由性能。并正式引入了中间件的支持,可以在路由中定义或者全局定义。另外包含了一个安全更新,是一个建议更新版本。
|
||||
|
||||
* 改进URL生成对路由`ext`方法的支持
|
||||
* 改进查询缓存对不同数据库相同表名的支持
|
||||
* 改进composer自动加载的性能
|
||||
* 改进空路由变量对默认参数的影响
|
||||
* mysql的`json`字段查询支持多级
|
||||
* Query类增加`option`方法
|
||||
* 优化路由匹配
|
||||
* 修复验证规则数字键名丢失问题
|
||||
* 改进路由Url生成
|
||||
* 改进一对一关联预载入查询
|
||||
* Request类增加`rootDomain`方法
|
||||
* 支持API资源控制器生成 `make:controller --api`
|
||||
* 优化Template类的标签解析
|
||||
* 容器类增加删除和清除对象实例的方法
|
||||
* 修正MorphMany关联的`eagerlyMorphToMany`方法一处错误
|
||||
* Container类的异常捕获改进
|
||||
* Domain对象支持`bind`方法
|
||||
* 修正分页参数
|
||||
* 默认模板的输出规则不受URL影响
|
||||
* 注解路由支持多级控制器
|
||||
* Query类增加`getNumRows`方法获取前次操作影响的记录数
|
||||
* 改进查询条件的性能
|
||||
* 改进模型类`readTransform`方法对序列化类型的处理
|
||||
* Log类增加`close`方法可以临时关闭当前请求的日志写入
|
||||
* 文件日志方式增加自动清理功能(设置`max_files`参数)
|
||||
* 修正Query类的`getPk`方法
|
||||
* 修正模板缓存的布局开关问题
|
||||
* 修正Query类`select`方法的缓存
|
||||
* 改进input助手函数
|
||||
* 改进断线重连的信息判断
|
||||
* 改进正则验证方法
|
||||
* 调整语言包的加载顺序 放到`app_init`之前
|
||||
* controller类`fetch`方法改为`final`
|
||||
* 路由地址中的变量支持使用`<var>`方式
|
||||
* 改进XMLResponse 支持传入编码过的xml内容
|
||||
* 修正Query类`view`方法的数组表名支持
|
||||
* 改进路由的模型闭包绑定
|
||||
* 改进分组变量规则的继承
|
||||
* 改进`cli-server`模式下的`composer`自动加载
|
||||
* 路由变量规则异常捕获
|
||||
* 引入中间件支持
|
||||
* 路由定义增加`middleware`方法
|
||||
* 增加生成中间件指令`make:middleware`
|
||||
* 增加全局中间件定义支持
|
||||
* 改进`optimize:config`指令对全局中间件的支持
|
||||
* 改进config类`has`方法
|
||||
* 改进时间查询的参数绑定
|
||||
* 改进`inc/dec/exp`查询的安全性
|
||||
|
||||
|
||||
## V5.1.5 (2018-1-31)
|
||||
|
||||
该版本主要增强了数据库的JSON查询,并支持JSON字段的聚合查询,改进了一些性能问题,修正了路由的一些BUG,主要更新如下:
|
||||
|
||||
* 改进数据集查询对`JSON`数据的支持
|
||||
* 改进聚合查询对`JSON`字段的支持
|
||||
* 模型类增加`getOrFail`方法
|
||||
* 改进数据库驱动的`parseKey`方法
|
||||
* 改进Query类`join`方法的自关联查询
|
||||
* 改进数据查询不存在不生成查询缓存
|
||||
* 增加`run`命令行指令启动内置服务器
|
||||
* `Request`类`pathinfo`方法改进对`cli-server`支持
|
||||
* `Session`类增加`use_lock`配置参数设置是否启用锁机制
|
||||
* 优化`File`缓存自动生成空目录的问题
|
||||
* 域名及分组路由支持`append`方法传递隐式参数
|
||||
* 改进日志的并发写入问题
|
||||
* 改进`Query`类的`where`方法支持传入`Query`对象
|
||||
* 支持设置单个日志文件的文件名
|
||||
* 修正路由规则的域名条件约束
|
||||
* `Request`类增加`subDomain`方法用于获取当前子域名
|
||||
* `Response`类增加`allowCache`方法控制是否允许请求缓存
|
||||
* `Request`类增加`sendData`方法便于扩展
|
||||
* 改进`Env`类不依赖`putenv`方法
|
||||
* 改进控制台`trace`显示错误
|
||||
* 改进`MorphTo`关联
|
||||
* 改进完整路由匹配后带斜线访问出错的情况
|
||||
* 改进路由的多级分组问题
|
||||
* 路由url地址生成支持多级分组
|
||||
* 改进路由Url生成的`url_convert`参数的影响
|
||||
* 改进`miss`和`auto`路由内部解析
|
||||
* 取消预载入关联查询缓存功能
|
||||
|
||||
## V5.1.4 (2018-1-19)
|
||||
|
||||
该版本主要增强了数据库和模型操作,主要更新如下:
|
||||
|
||||
* 支持设置 `deleteTime`属性为`false` 关闭软删除
|
||||
* 模型增加`getError`方法
|
||||
* 改进Query类的`getTableFields`/`getFieldsType`方法 支持表名自动获取
|
||||
* 模型类`toCollection`方法增加参数指定数据集类
|
||||
* 改进`union`查询
|
||||
* 关联预载入`with`方法增加缓存参数
|
||||
* 改进模型类的`get`和`all`方法的缓存 支持关联缓存
|
||||
* 支持`order by field`操作
|
||||
* 改进`insertAll`分批写入
|
||||
* 改进`json`字段数据支持
|
||||
* 增加JSON数据的模型对象化操作
|
||||
* 改进路由`ext`参数检测
|
||||
* 修正`rule`方法的`method`参数使用 `get|post` 方式注册路由的问题
|
||||
|
||||
## V5.1.3 (2018-1-12)
|
||||
|
||||
该版本主要改进了路由及调整函数加载顺序,主要更新如下:
|
||||
|
||||
* 增加`env`助手函数;
|
||||
* 增加`route`助手函数;
|
||||
* 增加视图路由方法;
|
||||
* 增加路由重定向方法;
|
||||
* 路由默认区分最后的目录斜杆(支持设置不区分);
|
||||
* 调整公共文件和配置文件的加载顺序(可以在配置文件中直接使用助手函数);
|
||||
* 视图类增加`filter`方法设置输出过滤;
|
||||
* `view`助手函数增加`filter`参数;
|
||||
* 改进缓存生成指令;
|
||||
* Session类的`get`方法支持获取多级;
|
||||
* Request类`only`方法支持指定默认值;
|
||||
* 改进路由分组;
|
||||
* 修正使用闭包查询的时候自动数据缓存出错的情况;
|
||||
* 废除`view_filter`钩子位置;
|
||||
* 修正分组下面的资源路由;
|
||||
* 改进session驱动;
|
||||
|
||||
## V5.1.2 (2018-1-8)
|
||||
|
||||
该版本改进了配置类及数据库类,主要更新如下:
|
||||
|
||||
* 修正嵌套路由分组;
|
||||
* 修正自定义模板标签界定符后表达式语法出错的情况;
|
||||
* 修正自关联的多次调用问题;
|
||||
* 修正数组查询的`null`条件查询;
|
||||
* 修正Query类的`order`及`field`的一处可能的BUG;
|
||||
* 配置参数设置支持三级;
|
||||
* 配置对象支持`ArrayAccess`;
|
||||
* App类增加`path`方法用于设置应用目录;
|
||||
* 关联定义增加`selfRelation`方法用于设置是否为自关联;
|
||||
|
||||
## V5.1.1 (2018-1-3)
|
||||
|
||||
修正一些反馈的BUG,包括:
|
||||
|
||||
* 修正Cookie类存取数组的问题
|
||||
* 修正Controller的`fetch`方法
|
||||
* 改进跨域请求
|
||||
* 修正`insertAll`方法
|
||||
* 修正`chunk`方法
|
||||
|
||||
## V5.1.0 (2018-1-1)
|
||||
|
||||
主要更新如下:
|
||||
|
||||
* 增加注解路由支持
|
||||
* 路由支持跨域请求设置
|
||||
* 增加`app_dispatch`钩子位置
|
||||
* 修正多对多关联的`detach`方法
|
||||
* 修正软删除的`destroy`方法
|
||||
* Cookie类`httponly`参数默认为false
|
||||
* 日志File驱动增加`single`参数配置记录同一个文件(不按日期生成)
|
||||
* 路由的`ext`和`denyExt`方法支持不传任何参数
|
||||
* 改进模型的`save`方法对`oracle`的支持
|
||||
* Query类的`insertall`方法支持配合`data`和`limit`方法
|
||||
* 增加`whereOr`动态查询支持
|
||||
* 日志的ip地址记录改进
|
||||
* 模型`saveAll`方法支持`isUpdate`方法
|
||||
* 改进`Pivot`模型的实例化操作
|
||||
* 改进Model类的`data`方法
|
||||
* 改进多对多中间表模型类
|
||||
* 模型增加`force`方法强制更新所有数据
|
||||
* Hook类支持设置入口方法名称
|
||||
* 改进验证类
|
||||
* 改进`hasWhere`查询的数据重复问题
|
||||
* 模型的`saveall`方法返回数据集对象
|
||||
* 改进File缓存的`clear`方法
|
||||
* 缓存添加统一的序列化机制
|
||||
* 改进泛三级域名的绑定
|
||||
* 改进泛域名的传值和取值
|
||||
* Request类增加`panDomain`方法
|
||||
* 改进废弃字段判断
|
||||
* App类增加`create`方法用于实例化应用类库
|
||||
* 容器类增加`has`方法
|
||||
* 改进多数据库切换连接
|
||||
* 改进断线重连的异常捕获
|
||||
* 改进模型类`buildQuery`方法
|
||||
* Query类增加`unionAll`方法
|
||||
* 关联统计功能增强(支持Sum/Max/Min/Avg)
|
||||
* 修正延迟写入
|
||||
* chunk方法支持复合主键
|
||||
* 改进JSON类型的写入
|
||||
* 改进Mysql的insertAll方法
|
||||
* Model类`save`方法改进复合主键包含自增的情况
|
||||
* 改进Query类`inc`和`dec`方法的关键字处理
|
||||
* File缓存inc和dec方法保持原来的有效期
|
||||
* 改进redis缓存的有效期判断
|
||||
* 增加checkRule方法用于单独数据的多个验证规则
|
||||
* 修正setDec方法的延迟写入
|
||||
* max和min方法增加force参数
|
||||
* 二级配置参数区分大小写
|
||||
* 改进join方法自关联的问题
|
||||
* 修正关联模型自定义表名的情况
|
||||
* Query类增加getFieldsType和getTableFields方法
|
||||
* 取消视图替换功能及view_replace_str配置参数
|
||||
* 改进域名绑定模块后的额外路由规则问题
|
||||
* 改进mysql的insertAll方法
|
||||
* 改进insertAll方法写入json字段数据的支持
|
||||
* 改进redis长连接多编号库的情况
|
||||
|
||||
## RC3版本(2017-11-6)
|
||||
|
||||
主要更新如下:
|
||||
|
||||
* 改进redis驱动的`get`方法
|
||||
* 修正Query类的`alias`方法
|
||||
* `File`类错误信息支持多语言
|
||||
* 修正路由的额外参数解析
|
||||
* 改进`whereTime`方法
|
||||
* 改进Model类`getAttr`方法
|
||||
* 改进App类的`controller`和`validate`方法支持多层
|
||||
* 改进`HasManyThrough`类
|
||||
* 修正软删除的`restore`方法
|
||||
* 改进`MorpthTo`关联
|
||||
* 改进数据库驱动类的`parseKey`方法
|
||||
* 增加`whereField`动态查询方法
|
||||
* 模型增加废弃字段功能
|
||||
* 改进路由的`after`行为检查和`before`行为机制
|
||||
* 改进路由分组的检查
|
||||
* 修正mysql的`json`字段查询
|
||||
* 取消Connection类的`quote`方法
|
||||
* 改进命令行的支持
|
||||
* 验证信息支持多语言
|
||||
* 修正路由模型绑定
|
||||
* 改进参数绑定类型对枚举类型的支持
|
||||
* 修正模板的`{$Think.version} `输出
|
||||
* 改进模板`date`函数解析
|
||||
* 改进`insertAll`方法支持分批执行
|
||||
* Request类`host`方法支持反向代理
|
||||
* 改进`JumpResponse`支持区分成功和错误模板
|
||||
* 改进开启类库后缀后的关联外键自动识别问题
|
||||
* 修正一对一关联的JOIN方式预载入查询问题
|
||||
* Query类增加`hidden`方法
|
||||
|
||||
## RC2版本(2017-10-17)
|
||||
|
||||
主要更新如下:
|
||||
|
||||
* 修正视图查询
|
||||
* 修正资源路由
|
||||
* 修正`HasMany`关联 修正`where`方法的闭包查询
|
||||
* 一对一关联绑定属性到父模型后 关联属性不再保留
|
||||
* 修正应用的命令行配置文件读取
|
||||
* 改进`Connection`类的`getCacheKey`方法
|
||||
* 改进文件上传的非法图像异常
|
||||
* 改进验证类的`unique`规则
|
||||
* Config类`get`方法支持获取一级配置
|
||||
* 修正count方法对`fetchSql`的支持
|
||||
* 修正mysql驱动对`socket`支持
|
||||
* 改进Connection类的`getRealSql`方法
|
||||
* 修正`view`助手函数
|
||||
* Query类增加`leftJoin` `rightJoin` 和 `fullJoin`方法
|
||||
* 改进app_namespace的获取
|
||||
* 改进`append`方法对一对一`bind`属性的支持
|
||||
* 改进关联的`saveall`方法的返回值
|
||||
* 路由标识设置异常修复
|
||||
* 改进Route类`rule`方法
|
||||
* 改进模型的`table`属性设置
|
||||
* 改进composer autofile的加载顺序
|
||||
* 改进`exception_handle`配置对闭包的支持
|
||||
* 改进app助手函数增加参数
|
||||
* 改进composer的加载路径判断
|
||||
* 修正路由组合变量的URL生成
|
||||
* 修正路由URL生成
|
||||
* 改进`whereTime`查询并支持扩展规则
|
||||
* File类的`move`方法第二个参数支持`false`
|
||||
* 改进Config类
|
||||
* 改进缓存类`remember`方法
|
||||
* 惯例配置文件调整 Url类当普通模式参数的时候不做`urlencode`处理
|
||||
* 取消`ROOT_PATH`和`APP_PATH`常量定义 如需更改应用目录 自己重新定义入口文件
|
||||
* 增加`app_debug`的`Env`获取
|
||||
* 修正泛域名绑定
|
||||
* 改进查询表达式的解析机制
|
||||
* mysql增加`regexp`查询表达式 支持正则查询
|
||||
* 改进查询表达式的异常判断
|
||||
* 改进model类的`destroy`方法
|
||||
* 改进Builder类 取消`parseValue`方法
|
||||
* 修正like查询的参数绑定问题
|
||||
* console和start文件移出核心纳入应用库
|
||||
* 改进Db类主键删除方法
|
||||
* 改进泛域名绑定模块
|
||||
* 取消`BIND_MODULE`常量 改为在入口文件使用`bind`方法设置
|
||||
* 改进数组查询
|
||||
* 改进模板渲染的异常处理
|
||||
* 改进控制器基类的架构方法参数
|
||||
* 改进Controller类的`success`和`error`方法
|
||||
* 改进对浏览器`JSON-Handle`插件的支持
|
||||
* 优化跳转模板的移动端显示
|
||||
* 修正模型查询的`chunk`方法对时间字段的支持
|
||||
* 改进trace驱动
|
||||
* Collection类增加`push`方法
|
||||
* 改进Redis Session驱动
|
||||
* 增加JumpResponse驱动
|
||||
|
||||
|
||||
## RC1(2017-9-8)
|
||||
|
||||
主要新特性为:
|
||||
|
||||
* 引入容器和Facade支持
|
||||
* 依赖注入完善和支持更多场景
|
||||
* 重构的(对象化)路由
|
||||
* 配置和路由目录独立
|
||||
* 取消系统常量
|
||||
* 助手函数增强
|
||||
* 类库别名机制
|
||||
* 模型和数据库增强
|
||||
* 验证类增强
|
||||
* 模板引擎改进
|
||||
* 支持PSR-3日志规范
|
||||
* RC1版本取消了5.0多个字段批量数组查询的方式
|
||||
32
芳林公司项目/www.zhiyuanhelp.com/LICENSE.txt
Normal file
32
芳林公司项目/www.zhiyuanhelp.com/LICENSE.txt
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
|
||||
版权所有Copyright © 2006-2018 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.
|
||||
180
芳林公司项目/www.zhiyuanhelp.com/README.md
Normal file
180
芳林公司项目/www.zhiyuanhelp.com/README.md
Normal file
@@ -0,0 +1,180 @@
|
||||

|
||||
|
||||
ThinkPHP 5.1(LTS版本) —— 12载初心,你值得信赖的PHP框架
|
||||
===============
|
||||
|
||||
[](https://scrutinizer-ci.com/g/top-think/framework/?branch=5.1)
|
||||
[](https://travis-ci.org/top-think/framework)
|
||||
[](https://packagist.org/packages/topthink/framework)
|
||||
[](https://packagist.org/packages/topthink/framework)
|
||||
[](http://www.php.net/)
|
||||
[](https://packagist.org/packages/topthink/framework)
|
||||
|
||||
ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:
|
||||
|
||||
+ 采用容器统一管理对象
|
||||
+ 支持Facade
|
||||
+ 注解路由支持
|
||||
+ 路由跨域请求支持
|
||||
+ 配置和路由目录独立
|
||||
+ 取消系统常量
|
||||
+ 助手函数增强
|
||||
+ 类库别名机制
|
||||
+ 增加条件查询
|
||||
+ 改进查询机制
|
||||
+ 配置采用二级
|
||||
+ 依赖注入完善
|
||||
+ 支持`PSR-3`日志规范
|
||||
+ 中间件支持(V5.1.6+)
|
||||
+ Swoole/Workerman支持(V5.1.18+)
|
||||
|
||||
|
||||
> ThinkPHP5的运行环境要求PHP5.6以上。
|
||||
|
||||
## 安装
|
||||
|
||||
使用composer安装
|
||||
|
||||
~~~
|
||||
composer create-project topthink/think tp
|
||||
~~~
|
||||
|
||||
启动服务
|
||||
|
||||
~~~
|
||||
cd tp
|
||||
php think run
|
||||
~~~
|
||||
|
||||
然后就可以在浏览器中访问
|
||||
|
||||
~~~
|
||||
http://localhost:8000
|
||||
~~~
|
||||
|
||||
更新框架
|
||||
~~~
|
||||
composer update topthink/framework
|
||||
~~~
|
||||
|
||||
|
||||
## 在线手册
|
||||
|
||||
+ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content)
|
||||
+ [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155)
|
||||
|
||||
## 目录结构
|
||||
|
||||
初始的目录结构如下:
|
||||
|
||||
~~~
|
||||
www WEB部署目录(或者子目录)
|
||||
├─application 应用目录
|
||||
│ ├─common 公共模块目录(可以更改)
|
||||
│ ├─module_name 模块目录
|
||||
│ │ ├─common.php 模块函数文件
|
||||
│ │ ├─controller 控制器目录
|
||||
│ │ ├─model 模型目录
|
||||
│ │ ├─view 视图目录
|
||||
│ │ └─ ... 更多类库目录
|
||||
│ │
|
||||
│ ├─command.php 命令行定义文件
|
||||
│ ├─common.php 公共函数文件
|
||||
│ └─tags.php 应用行为扩展定义文件
|
||||
│
|
||||
├─config 应用配置目录
|
||||
│ ├─module_name 模块配置目录
|
||||
│ │ ├─database.php 数据库配置
|
||||
│ │ ├─cache 缓存配置
|
||||
│ │ └─ ...
|
||||
│ │
|
||||
│ ├─app.php 应用配置
|
||||
│ ├─cache.php 缓存配置
|
||||
│ ├─cookie.php Cookie配置
|
||||
│ ├─database.php 数据库配置
|
||||
│ ├─log.php 日志配置
|
||||
│ ├─session.php Session配置
|
||||
│ ├─template.php 模板引擎配置
|
||||
│ └─trace.php Trace配置
|
||||
│
|
||||
├─route 路由定义目录
|
||||
│ ├─route.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 命令行入口文件
|
||||
~~~
|
||||
|
||||
> 可以使用php自带webserver快速测试
|
||||
> 切换到根目录后,启动命令:php think run
|
||||
|
||||
## 命名规范
|
||||
|
||||
`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
芳林公司项目/www.zhiyuanhelp.com/application/.htaccess
Normal file
1
芳林公司项目/www.zhiyuanhelp.com/application/.htaccess
Normal file
@@ -0,0 +1 @@
|
||||
deny from all
|
||||
1
芳林公司项目/www.zhiyuanhelp.com/application/.pydio
Normal file
1
芳林公司项目/www.zhiyuanhelp.com/application/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
5c07980c-2e8b-4da1-8431-2ace6ab55cc2
|
||||
1
芳林公司项目/www.zhiyuanhelp.com/application/admin/.pydio
Normal file
1
芳林公司项目/www.zhiyuanhelp.com/application/admin/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
e588f057-12f7-4992-a56b-0257537f983f
|
||||
34
芳林公司项目/www.zhiyuanhelp.com/application/admin/common.php
Normal file
34
芳林公司项目/www.zhiyuanhelp.com/application/admin/common.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
//后台公共文件
|
||||
|
||||
|
||||
if (!function_exists('__log')) {
|
||||
|
||||
/**
|
||||
* 写入系统日志
|
||||
* @param $data 数据
|
||||
* @param $type 日志类型
|
||||
*/
|
||||
function __log($data, $type) {
|
||||
app('Log')::write(json_encode($data, JSON_UNESCAPED_UNICODE), $type);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('replace_menu_title')) {
|
||||
|
||||
/**
|
||||
* 格式化菜单名称进行输出
|
||||
* @param $var 变量名
|
||||
* @param int $number 循环次数
|
||||
* @return string
|
||||
*/
|
||||
function replace_menu_title($var, $number = 1) {
|
||||
$prefix = '';
|
||||
for ($i = 1; $i < $number; $i++) {
|
||||
$prefix .= ' ├ ';
|
||||
}
|
||||
return $prefix . $var;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
090fb2ac-13d8-44d6-9c0b-25b80b00af7d
|
||||
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* 后台公用模型
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
use think\Controller;
|
||||
use think\exception\HttpResponseException;
|
||||
use app\admin\service\ModelService;
|
||||
use app\admin\service\AuthService;
|
||||
|
||||
class AdminController extends Controller
|
||||
{
|
||||
/**
|
||||
* 开启登录控制
|
||||
* @var bool
|
||||
*/
|
||||
protected $is_login = true;
|
||||
|
||||
/**
|
||||
* 开启权限控制
|
||||
* @var bool
|
||||
*/
|
||||
protected $is_auth = '';
|
||||
|
||||
/**
|
||||
* 网站栏目
|
||||
* @var string
|
||||
*/
|
||||
protected $nav = '';
|
||||
|
||||
/**
|
||||
* 登录用户信息
|
||||
* @var string
|
||||
*/
|
||||
protected $user = '';
|
||||
|
||||
/**
|
||||
* 后台配置信息
|
||||
* @var array
|
||||
*/
|
||||
protected $SysInfo = [];
|
||||
|
||||
/**
|
||||
* 网站标题
|
||||
* @var string
|
||||
*/
|
||||
protected $title = '';
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
* Index constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
list($this->nav, $this->title, $this->is_login, $this->is_auth,) = ['', '', true, true];
|
||||
$this->SysInfo = cache('SysInfo');
|
||||
|
||||
|
||||
//检测登录情况
|
||||
if ($this->is_login == true) {
|
||||
$this->__checkLogin();
|
||||
}
|
||||
|
||||
//判断是否有权限进行访问
|
||||
if ($this->is_auth == true) {
|
||||
$this->__checkAuth();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测登录
|
||||
*/
|
||||
public function __checkLogin()
|
||||
{
|
||||
$user = session('user');
|
||||
//判断是否登录
|
||||
if (empty($user)) {
|
||||
$data = ['type' => 'error', 'code' => 1, 'msg' => '抱歉,您还没有登录获取访问权限!', 'url' => url('@admin/login')];
|
||||
}
|
||||
|
||||
//判断登录是否过期
|
||||
(isset($this->SysInfo['LoginDuration']) && !empty($this->SysInfo['LoginDuration'])) ? $LoginDuration = $this->SysInfo['LoginDuration'] : $LoginDuration = '';
|
||||
if (!empty($LoginDuration) && !empty($user)) {
|
||||
if (time() - $user['login_at'] >= $LoginDuration) {
|
||||
\app\admin\service\LogService::loginLog($user['id'], 0, 1, "【登录过期】正在退出后台系统!");
|
||||
$data = ['type' => 'error', 'code' => 1, 'msg' => '登录已过期,请重新登录!', 'url' => url('@admin/login')];
|
||||
}
|
||||
}
|
||||
//返回错误信息
|
||||
if (!empty($data)) {
|
||||
session('user', null);
|
||||
throw new HttpResponseException($this->request->isAjax() ? json($data) : exit(msg_error($data['msg'], $data['url'])));
|
||||
}
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测登录情况
|
||||
*/
|
||||
public function __checkAuth()
|
||||
{
|
||||
if (AuthService::checkNode() == false) {
|
||||
$data = ['type' => 'error', 'code' => 1, 'msg' => '抱歉,您暂无该权限,请联系管理员!', 'url' => url('@admin')];
|
||||
throw new HttpResponseException($this->request->isAjax() ? json($data) : exit(msg_error($data['msg'], $data['url'])));
|
||||
}
|
||||
}
|
||||
}
|
||||
248
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Auth.php
Normal file
248
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Auth.php
Normal file
@@ -0,0 +1,248 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
|
||||
class Auth extends AdminController {
|
||||
|
||||
/**
|
||||
* Auth模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* node constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('auth');
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*/
|
||||
public function index() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//ajax访问获取数据
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->authList($page, $limit, $search));
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '系统角色列表',
|
||||
'data' => '',
|
||||
'status' => [['id' => 1, 'title' => '启用'], ['id' => 0, 'title' => '禁用']],
|
||||
];
|
||||
|
||||
return $this->fetch('', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Common.edit_field');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editField($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加角色
|
||||
* @return mixed|\think\response\Json
|
||||
*/
|
||||
public function add() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '添加角色',
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Auth.add');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//清空缓存
|
||||
clear_menu();
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->add($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改管理员信息
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function edit() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需修改角色
|
||||
$auth = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if (empty($auth)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '修改角色信息',
|
||||
'auth' => $auth,
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Auth.edit');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->edit($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单模板
|
||||
* @return mixed
|
||||
*/
|
||||
protected function form() {
|
||||
return $this->fetch('form');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
* @return \think\response\Json
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function del() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
if (!is_array($get['id'])) {
|
||||
$validate = $this->validate($get, 'app\admin\validate\Auth.del');
|
||||
if (true !== $validate) return __error($validate);
|
||||
}
|
||||
|
||||
//执行更新操作操作
|
||||
if (!is_array($get['id'])) {
|
||||
$del = $this->model->where('id', $get['id'])->delete();
|
||||
model('auth_node')->where('auth', $get['id'])->delete();
|
||||
} else {
|
||||
$del = $this->model->whereIn('id', $get['id'])->delete();
|
||||
model('auth_node')->whereIn('auth', $get['id'])->delete();
|
||||
}
|
||||
|
||||
if ($del >= 1) {
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return __success('删除成功!');
|
||||
} else {
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改角色状态
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function status() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($get, 'app\admin\validate\Auth.status');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//判断菜单状态
|
||||
$status = $this->model->where('id', $get['id'])->value('status');
|
||||
$status == 1 ? list($msg, $status) = ['角色禁用成功', $status = 0] : list($msg, $status) = ['角色启用成功', $status = 1];
|
||||
|
||||
//执行更新操作操作
|
||||
$update = $this->model->where('id', $get['id'])->update(['status' => $status]);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
if ($update >= 1) return __success($msg);
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 授权信息
|
||||
* @return mixed|string|\think\response\Json
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function authorize() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需授权角色
|
||||
$auth = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if (empty($auth)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
$node = model('node')->where(['is_auth' => 1])->order('node asc')->select();
|
||||
|
||||
$auth_node = model('auth_node')->where(['auth' => $auth['id']])->select();
|
||||
|
||||
foreach ($node as &$vo) {
|
||||
$i = 0;
|
||||
foreach ($auth_node as $al) {
|
||||
$vo['id'] == $al['node'] && $i++;
|
||||
}
|
||||
$i == 0 ? $vo['is_checked'] = false : $vo['is_checked'] = true;
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '角色授权',
|
||||
'auth' => $auth,
|
||||
'node' => $node,
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
empty($post['node_id']) && $post['node_id'] = [];
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Auth.authorize');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
$insertAll = [];
|
||||
foreach ($post['node_id'] as $vo) {
|
||||
$insertAll[] = [
|
||||
'auth' => $post['auth_id'],
|
||||
'node' => $vo,
|
||||
];
|
||||
}
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
//清空旧数据
|
||||
model('auth_node')->where(['auth' => $post['auth_id']])->delete();
|
||||
//保存数据,返回结果
|
||||
return model('auth_node')->authorize($insertAll);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
/**
|
||||
* 系统配置
|
||||
* Class Config
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
class Config extends AdminController {
|
||||
|
||||
/**
|
||||
* config模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* node constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('config');
|
||||
}
|
||||
|
||||
/**
|
||||
* 系统配置信息列表
|
||||
*/
|
||||
public function index() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//ajax访问获取数据
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 500);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->configList($page, $limit, $search));
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '系统参数列表',
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('');
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Common.edit_field');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editField($post);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* 图标管理
|
||||
* Class Icon
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
|
||||
class Icon extends AdminController {
|
||||
|
||||
/**
|
||||
* 图标列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
$basic_data = [
|
||||
'title' => '图标列表',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
public function fa(){
|
||||
$basic_data = [
|
||||
'title' => 'fa图标列表',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/*
|
||||
* 首页
|
||||
* */
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Request;
|
||||
|
||||
|
||||
class Index extends AdminController {
|
||||
|
||||
/**
|
||||
* 首页
|
||||
* @return mixed
|
||||
*/
|
||||
public function index() {
|
||||
Cache::remember('Home', function () {
|
||||
|
||||
return model('menu')->getHome();
|
||||
});
|
||||
$apimenu = new \app\admin\controller\api\Menu();
|
||||
|
||||
$sys_info = Cache::get('SysInfo');
|
||||
|
||||
$basic_data = [
|
||||
'title' => $sys_info['ManageName'],
|
||||
'nav' => $apimenu->getNav(),
|
||||
'home' => Cache::get('Home'),
|
||||
'data' => '',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页欢迎界面
|
||||
* @return mixed
|
||||
*/
|
||||
public function welcome() {
|
||||
|
||||
$basic_data = [
|
||||
'quick_nav' => \app\admin\model\Nav::getQuickNav(),
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
/*
|
||||
* 后台登录
|
||||
* */
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use think\Controller;
|
||||
use think\facade\Cache;
|
||||
|
||||
class Login extends Controller {
|
||||
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* Login constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('User');
|
||||
$action = $this->request->action();
|
||||
if (!empty(session('user.id')) && $action !== 'out' && $action !== 'change') return $this->redirect('@admin');
|
||||
}
|
||||
|
||||
/**
|
||||
* 后台登录
|
||||
* @return mixed|\think\response\Json
|
||||
*/
|
||||
public function index() {
|
||||
if ($this->request->isGet()) {
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '伊莎洗衣后台登录',
|
||||
'data' => '',
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('');
|
||||
} else {
|
||||
|
||||
$post = $this->request->post();
|
||||
|
||||
//判断是否开启验证码登录选择验证规则
|
||||
$SysInfo = Cache::get('SysInfo');
|
||||
$SysInfo['VercodeType'] != 1 ? $validate_type = 'app\admin\validate\Login.index_off' : $validate_type = 'app\admin\validate\Login.index_on';
|
||||
|
||||
|
||||
//验证参数
|
||||
$validate = $this->validate($post, $validate_type);
|
||||
if (true !== $validate) {
|
||||
return __error($validate);
|
||||
}
|
||||
|
||||
//判断登录是否成功
|
||||
$login = $this->model->login($post['username'], $post['password']);
|
||||
|
||||
if ($login['code'] == 1) {
|
||||
isset($login['user']['id']) ? $user_id = $login['user']['id'] : $user_id = '';
|
||||
\app\admin\service\LogService::loginLog($user_id, 1, 0, "【账号登录】{$login['msg']}");
|
||||
return __error($login['msg']);
|
||||
}
|
||||
|
||||
//储存session数据
|
||||
$login['user']['login_at'] = time();
|
||||
session('user', $login['user']);
|
||||
\app\admin\service\LogService::loginLog($login['user']['id'], 1, 1, '【账号登录】登录成功,正在进入系统!');
|
||||
return __success($login['msg']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换账户
|
||||
* @return mixed
|
||||
*/
|
||||
public function change() {
|
||||
if ($this->request->isGet()) {
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '伊莎洗衣后台登录',
|
||||
'data' => '',
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('index');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function out() {
|
||||
|
||||
//记录日志
|
||||
\app\admin\service\LogService::loginLog(session('user.id'), 0, 1, "【主动退出】正在退出后台系统!");
|
||||
|
||||
//删除自身菜单缓存
|
||||
Cache::rm(session('user.id') . '_AdminMenu');
|
||||
|
||||
//清空sesion数据
|
||||
session('user', null);
|
||||
|
||||
return msg_success('退出登录成功', url('@admin/login'));
|
||||
}
|
||||
}
|
||||
207
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Menu.php
Normal file
207
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Menu.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
/**
|
||||
* 菜单管理
|
||||
* Class Menu
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
|
||||
|
||||
|
||||
class Menu extends AdminController {
|
||||
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('menu');
|
||||
}
|
||||
|
||||
/**
|
||||
* 菜单栏列表
|
||||
* @return mixed|\think\response\Json
|
||||
*/
|
||||
public function index() {
|
||||
if (!$this->request->isPost()) {
|
||||
//ajax访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$search = (array)$this->request->get('search', []);
|
||||
$menu_list = $this->model->menuList($search);
|
||||
return json($menu_list);
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'status' => [
|
||||
['id' => 1, 'title' => '启用'],
|
||||
['id' => 0, 'title' => '禁用'],
|
||||
],
|
||||
'title' => '菜单栏管理',
|
||||
'data' => '',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Common.edit_field');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editField($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加菜单
|
||||
* @return mixed|\think\response\Json
|
||||
*/
|
||||
public function add() {
|
||||
if (!$this->request->isPost()) {
|
||||
$pid = $this->request->get('pid', '');
|
||||
$basic_data = [
|
||||
'title' => '添加菜单',
|
||||
];
|
||||
!empty($pid) && $basic_data['menu'] = ['pid' => $pid];
|
||||
$this->assign($basic_data);
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
unset($post['id']);
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Menu.add');
|
||||
if (true !== $validate) return __error($validate);
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return $this->model->add($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改菜单
|
||||
* @return mixed
|
||||
*/
|
||||
public function edit() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需修改菜单
|
||||
$menu = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if (empty($menu)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
strpos($menu['icon'], 'fa-') !== false ? $menu['icon_type'] = 'fa' : $menu['icon_type'] = 'layui';
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '修改菜单',
|
||||
'menu' => $menu,
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Menu.edit');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return $this->model->edit($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单模板
|
||||
* @return mixed
|
||||
*/
|
||||
protected function form() {
|
||||
|
||||
$basic_data = [
|
||||
'up_menu' => $this->model->getUpMenu(),
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('form');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
* @return \think\response\Json
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function del() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
if (!is_array($get['id'])) {
|
||||
$validate = $this->validate($get, 'app\admin\validate\Menu.del');
|
||||
if (true !== $validate) return __error($validate);
|
||||
}
|
||||
|
||||
//执行删除操作
|
||||
if (!is_array($get['id'])) {
|
||||
$del = $this->model->where('id', $get['id'])->delete();
|
||||
} else {
|
||||
$del = $this->model->whereIn('id', $get['id'])->delete();
|
||||
}
|
||||
|
||||
if ($del >= 1) {
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return __success('菜单删除成功!');
|
||||
} else {
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改菜单状态
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function status() {
|
||||
$get = $this->request->get();
|
||||
if ($get['id'] == 1) return __error('首页不允许更改状态');
|
||||
//验证数据
|
||||
$validate = $this->validate($get, 'app\admin\validate\Menu.status');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//判断菜单状态
|
||||
$status = $this->model->where('id', $get['id'])->value('status');
|
||||
if ($status == 1) {
|
||||
$msg = '菜单禁用成功';
|
||||
$status = 0;
|
||||
} else {
|
||||
$msg = '菜单启用成功';
|
||||
$status = 1;
|
||||
}
|
||||
|
||||
//执行更新操作操作
|
||||
$update = $this->model->where('id', $get['id'])->update(['status' => $status]);
|
||||
|
||||
if ($update >= 1) {
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return __success($msg);
|
||||
} else {
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* 节点管理
|
||||
* Class Node
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
|
||||
class Node extends AdminController {
|
||||
|
||||
/**
|
||||
* node模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* node constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('node');
|
||||
}
|
||||
|
||||
/**
|
||||
* 节点列表
|
||||
*/
|
||||
public function index() {
|
||||
if (!$this->request->isPost()) {
|
||||
//ajax访问获取数据
|
||||
if (!empty($this->request->get('module'))) {
|
||||
return json($this->model->nodeModuleList($this->request->get('module')));
|
||||
}
|
||||
|
||||
$module_list = $this->model->where(['type' => 1])->order(['node'=>'asc'])->select()->toArray();
|
||||
foreach ($module_list as $k => $val) $k == 0 ? $module_list[$k]['is_selectd'] = true : $module_list[$k]['is_selectd'] = false;
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '系统节点列表',
|
||||
'module_list' => $module_list,
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('');
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\Common.edit_field');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editField($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改节点状态
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function status() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($get, 'app\admin\validate\Node.status');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//判断菜单状态
|
||||
$status = $this->model->where('id', $get['id'])->value('is_auth');
|
||||
$status == 1 ? list($msg, $status) = ['节点禁用成功', $status = 0] : list($msg, $status) = ['节点启用成功', $status = 1];
|
||||
|
||||
//执行更新操作操作
|
||||
$update = $this->model->where('id', $get['id'])->update(['is_auth' => $status]);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
if ($update >= 1) return __success($msg);
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/28
|
||||
* Time: 13:54
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use think\Db;
|
||||
use think\Exception;
|
||||
use think\facade\Cache;
|
||||
use think\Log;
|
||||
|
||||
class Shell
|
||||
{
|
||||
//修改新高考mykemu字段
|
||||
public function updateMykemu(){
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('recLikekemus');
|
||||
if(empty($id)){
|
||||
$id = 3793738;
|
||||
}
|
||||
$count = Db::table('rec_js')->where('id','between',[$id,7592360])->count();
|
||||
$num = 1000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i-1)*$num;
|
||||
|
||||
$result = Db::table('rec_js')->field('id,mykemu')->where('id','between',[$id,7592360])->limit($offet,$num)->select();
|
||||
$level = config('setsub.levelArr');
|
||||
foreach ($result as $key => $val) {
|
||||
$val['mykemu'] = $result = explode(',',$val['mykemu']);
|
||||
$res = '';
|
||||
foreach($val['mykemu'] as $k=>$v){
|
||||
|
||||
$res .= $level[$v];
|
||||
}
|
||||
|
||||
Db::table('rec_js')->where('id','=',$val['id'])->update(['mykemu'=>$res]);
|
||||
Cache::store('redis')->set("recLikekemus",$val['id'],36000);
|
||||
}
|
||||
|
||||
}
|
||||
echo 1;die;
|
||||
|
||||
}
|
||||
/*
|
||||
* 江苏同步public和majorNum
|
||||
* */
|
||||
|
||||
public function pubMajorNumTojs(){
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('recjsIDs');
|
||||
|
||||
if(empty($id)){
|
||||
$id = 0;
|
||||
}
|
||||
|
||||
$count = Db::table('rec_js')->where('id','between',[$id,7592360])->count();
|
||||
$num = 10000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
|
||||
$result = Db::table('rec_js')->field("id,sch_id")->where('id','between',[$id,7592360])->limit($offet, $num)->select();
|
||||
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_public")->where('sch_id', '=', $val['sch_id'])->find();
|
||||
$resCount = Db::table('rec_js_major')->where('rec_id','=',$val['id'])->find();
|
||||
$count = count(json_decode($resCount['professions']));
|
||||
Db::table('rec_js')->where([['id', '=', $val['id']]])->update(['is_public' => $resSch['is_public'],'majorNum'=>$count]);
|
||||
Cache::store('redis')->set("recjsIDs",$val['id'],36000);
|
||||
}
|
||||
}
|
||||
echo 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* 同步数据到yzy_major_score表,sch_name,cost,typeName
|
||||
*/
|
||||
|
||||
public function getSchNameTypeNameToJs(){
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('majorScoreID');
|
||||
|
||||
if(empty($id)){
|
||||
$id = 0;
|
||||
}
|
||||
|
||||
$count = Db::table('yzy_major_score')->where('id','between',[$id,3626706])->count();
|
||||
$num = 10000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
|
||||
$result = Db::table('yzy_major_score')->field("id,sch_id,majorCode")->where('id','between',[$id,3626706])->limit($offet, $num)->select();
|
||||
|
||||
foreach ($result as $key => $val) {
|
||||
$resCode = Db::table('yzy_majors')->field('pid')->where([['level','=',3],['code','=',$val['majorCode']]])->find();
|
||||
$relCode = empty($resCode)?Db::table('yzy_majors')->field('pid,title')->where([['level','=',2],['code','=',$val['majorCode']]])->find():Db::table('yzy_majors')->field('title')->where('id','=',$resCode['pid'])->find();
|
||||
if(empty($relCode)){
|
||||
$relCode['title'] = '';
|
||||
}
|
||||
$resSch = Db::table('yzy_school')->field("title")->where('sch_id', '=', $val['sch_id'])->find();
|
||||
Db::table('yzy_major_score')->where('id','=',$val['id'])->update(['sch_name'=>$resSch['title'],'typeName'=>$relCode['title']]);
|
||||
Cache::store('redis')->set("majorScoreID",$val['id'],36000);
|
||||
}
|
||||
}
|
||||
echo 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 修改rec_zhejiang_majors表,将classify中文转换成数字
|
||||
* */
|
||||
public function updateCollegeType(){
|
||||
$result = Db::table('rec_zhejiang_schs')->field('id,classify')->select();
|
||||
$cate = config('setsub.cateArr');
|
||||
foreach ($result as $key => $val) {
|
||||
$cateid = $cate[$val['classify']];
|
||||
|
||||
Db::table('rec_zhejiang_schs')->where('id','=',$val['id'])->update(['collegeType'=>$cateid]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 最低分和位次迁移
|
||||
* */
|
||||
public function updateMajor(){
|
||||
$result = Db::table('rec_wen_major')->select();
|
||||
|
||||
foreach($result as $key=>$val){
|
||||
|
||||
$res = json_decode($val['professions']);
|
||||
foreach($res as $k => $v){
|
||||
$data['rec_id'] = $result[$key]['rec_id'];
|
||||
$data['title'] = $v->alias;
|
||||
$data['code'] = $v->majorCode;
|
||||
$resRank = json_decode($v->extended);
|
||||
$data['lowestRank'] = $resRank[0]->ls;
|
||||
$data['minScore'] = $resRank[0]->ms;
|
||||
$data['scoreLineYear'] = $v->scoreLineYear;
|
||||
$data['year'] = $v->year;
|
||||
$data['enterNum'] = $v->enterNum;
|
||||
$data['planNum'] = $v->planNum;
|
||||
$data['probability'] = $v->probability;
|
||||
Db::table('rec_majors')->insert($data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考
|
||||
* 数据迁移yzy_zj_major_score 新增字段 sch_cate rankOfCn
|
||||
* */
|
||||
|
||||
public function updateMajorScore(){
|
||||
$result = Db::table('yzy_zj_major_score')->field("id,sch_id")->select();
|
||||
$cate = config('setsub.cateName');
|
||||
foreach ($result as $key =>$val){
|
||||
$resClass = Db::table('yzy_school')->field('cate_id')->where('sch_id','=',$val['sch_id'])->find();
|
||||
$cateName = $cate[$resClass['cate_id']];
|
||||
$resRank = Db::table("yzy_school_exts")->field('rankOfCn')->where("sch_id",'=',$val['sch_id'])->find();
|
||||
|
||||
Db::table('yzy_zj_major_score')->where([['id','=',$val['id']],['sch_id','=',$val['sch_id']]])->update(['classify'=>$cateName,'rankOfCn'=>$resRank['rankOfCn']]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* school表排名更新
|
||||
* */
|
||||
|
||||
public function updateSchoolRank(){
|
||||
$result = Db::table('yzy_school')->field("id,sch_id")->select();
|
||||
foreach ($result as $key =>$val){
|
||||
|
||||
$resRank = Db::table("yzy_school_exts")->field('rankOfCn')->where("sch_id",'=',$val['sch_id'])->find();
|
||||
|
||||
Db::table('yzy_school')->where([['id','=',$val['id']],['sch_id','=',$val['sch_id']]])->update(['rankOfCn'=>$resRank['rankOfCn']]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考
|
||||
* 专业数量同步到院校表
|
||||
* */
|
||||
public function majorCountToSch(){
|
||||
set_time_limit(0);
|
||||
$count = Db::table('rec_zhejiang_majors')->count();
|
||||
$num = 1000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_schs')->field("id")->limit($offet, $num)->select();
|
||||
foreach ($result as $key => $val) {
|
||||
$resMajor = Db::table('rec_zhejiang_schs_majors')->field('professions')->where('rec_id', '=', $val['id'])->find();
|
||||
$count = count(json_decode($resMajor['professions']));
|
||||
Db::table('rec_zhejiang_schs')->where('id', '=', $val['id'])->update(['majorNum' => $count]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 院校logo地址查询
|
||||
* */
|
||||
public function getSchoolLogos(){
|
||||
$result = Db::table('yzy_school')->field("sch_id,logo")->select();
|
||||
return api_return('ok',$result);
|
||||
}
|
||||
|
||||
/*
|
||||
* 新高考院校表同步is_yldx,is_ylxk
|
||||
* */
|
||||
|
||||
public function ylxkyldxToNewSch(){
|
||||
set_time_limit(0);
|
||||
$count = Db::table('rec_zhejiang_schs')->count();
|
||||
$num = 100;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_schs')->field("id,collegeId")->limit($offet, $num)->select();
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_yldx,is_ylxk")->where('sch_id', '=', $val['collegeId'])->find();
|
||||
Db::table('rec_zhejiang_schs')->where([['id', '=', $val['id']], ['collegeId', '=', $val['collegeId']]])->update(['is_yldx' => $resSch['is_yldx'], 'is_ylxk' => $resSch['is_ylxk']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考專業表同步is_yldx,is_ylxk
|
||||
* */
|
||||
|
||||
public function ylxkyldxToNewSchMajor(){
|
||||
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('NewSchMajorIDso');
|
||||
if(empty($id)){
|
||||
$id = 0;
|
||||
}
|
||||
$count = Db::table('rec_zhejiang_majors')->where('id','>',$id)->count();
|
||||
$num = 10000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_majors')->field("id,collegeId")->where('id','>',$id)->limit($offet, $num)->select();
|
||||
try {
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_public")->where('sch_id', '=', $val['collegeId'])->find();
|
||||
Db::table('rec_zhejiang_majors')->where([['id', '=', $val['id']]])->update(['is_public' => $resSch['is_public']]);
|
||||
Cache::store('redis')->set("NewSchMajorIDso",$val['id'],36000);
|
||||
\think\facade\Log::error($val['id']);
|
||||
|
||||
}
|
||||
}catch (\Exception $exception){
|
||||
\think\facade\Log::error($exception);
|
||||
}
|
||||
}
|
||||
echo 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 普通高考院校文科同步雙一流字段和majorNum,public
|
||||
* */
|
||||
|
||||
public function sylMajorNumToWen(){
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('recWenIDso');
|
||||
|
||||
if(empty($id)){
|
||||
$id = 0;
|
||||
}
|
||||
|
||||
$count = Db::table('rec_wen')->where('id','between',[$id,8175158])->count();
|
||||
$num = 10000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
|
||||
$result = Db::table('rec_wen')->field("id,sch_id")->where('id','between',[$id,8175158])->limit($offet, $num)->select();
|
||||
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_public")->where('sch_id', '=', $val['sch_id'])->find();
|
||||
Db::table('rec_wen')->where([['id', '=', $val['id']]])->update(['is_public' => $resSch['is_public']]);
|
||||
Cache::store('redis')->set("recWenIDso",$val['id'],36000);
|
||||
}
|
||||
}
|
||||
echo 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 普通高考院校理科同步雙一流字段和majorNum
|
||||
* */
|
||||
|
||||
public function sylMajorNumToLi(){
|
||||
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('recLikeIDo');
|
||||
if(empty($id)){
|
||||
$id = 0;
|
||||
}
|
||||
$count = Db::table('rec_li')->where('id','between',[$id,10491664])->count();
|
||||
$num = 10000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
|
||||
$result = Db::table('rec_li')->field("id,sch_id")->where('id','between',[$id,10491664])->limit($offet, $num)->select();
|
||||
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_public")->where('sch_id', '=', $val['sch_id'])->find();
|
||||
Db::table('rec_li')->where([['id', '=', $val['id']]])->update(['is_public' => $resSch['is_public']]);
|
||||
Cache::store('redis')->set("recLikeIDo",$val['id'],36000);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
echo 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/28
|
||||
* Time: 13:54
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use think\Db;
|
||||
use think\Exception;
|
||||
use think\facade\Cache;
|
||||
use think\Log;
|
||||
|
||||
class Shellone
|
||||
{
|
||||
//修改新高考mykemu字段
|
||||
public function updateMykemu(){
|
||||
set_time_limit(0);
|
||||
$count = Db::table('rec_js')->count();
|
||||
$num = 100;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i-1)*$num;
|
||||
|
||||
$result = Db::table('rec_js')->field('id,mykemu')->limit($offet,$num)->select();
|
||||
$level = config('setsub.levelArr');
|
||||
foreach ($result as $key => $val) {
|
||||
$val['mykemu'] = $result = explode(',',$val['mykemu']);
|
||||
$res = '';
|
||||
foreach($val['mykemu'] as $k=>$v){
|
||||
|
||||
$res .= $level[$v];
|
||||
}
|
||||
|
||||
Db::table('rec_js')->where('id','=',$val['id'])->update(['mykemu'=>$res]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
echo ok;die;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* 修改rec_zhejiang_majors表,将classify中文转换成数字
|
||||
* */
|
||||
public function updateCollegeType(){
|
||||
$result = Db::table('rec_zhejiang_schs')->field('id,classify')->select();
|
||||
$cate = config('setsub.cateArr');
|
||||
foreach ($result as $key => $val) {
|
||||
$cateid = $cate[$val['classify']];
|
||||
|
||||
Db::table('rec_zhejiang_schs')->where('id','=',$val['id'])->update(['collegeType'=>$cateid]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 最低分和位次迁移
|
||||
* */
|
||||
public function updateMajor(){
|
||||
$result = Db::table('rec_wen_major')->select();
|
||||
|
||||
foreach($result as $key=>$val){
|
||||
|
||||
$res = json_decode($val['professions']);
|
||||
foreach($res as $k => $v){
|
||||
$data['rec_id'] = $result[$key]['rec_id'];
|
||||
$data['title'] = $v->alias;
|
||||
$data['code'] = $v->majorCode;
|
||||
$resRank = json_decode($v->extended);
|
||||
$data['lowestRank'] = $resRank[0]->ls;
|
||||
$data['minScore'] = $resRank[0]->ms;
|
||||
$data['scoreLineYear'] = $v->scoreLineYear;
|
||||
$data['year'] = $v->year;
|
||||
$data['enterNum'] = $v->enterNum;
|
||||
$data['planNum'] = $v->planNum;
|
||||
$data['probability'] = $v->probability;
|
||||
Db::table('rec_majors')->insert($data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考
|
||||
* 数据迁移yzy_zj_major_score 新增字段 sch_cate rankOfCn
|
||||
* */
|
||||
|
||||
public function updateMajorScore(){
|
||||
$result = Db::table('yzy_zj_major_score')->field("id,sch_id")->select();
|
||||
$cate = config('setsub.cateName');
|
||||
foreach ($result as $key =>$val){
|
||||
$resClass = Db::table('yzy_school')->field('cate_id')->where('sch_id','=',$val['sch_id'])->find();
|
||||
$cateName = $cate[$resClass['cate_id']];
|
||||
$resRank = Db::table("yzy_school_exts")->field('rankOfCn')->where("sch_id",'=',$val['sch_id'])->find();
|
||||
|
||||
Db::table('yzy_zj_major_score')->where([['id','=',$val['id']],['sch_id','=',$val['sch_id']]])->update(['classify'=>$cateName,'rankOfCn'=>$resRank['rankOfCn']]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* school表排名更新
|
||||
* */
|
||||
|
||||
public function updateSchoolRank(){
|
||||
$result = Db::table('yzy_school')->field("id,sch_id")->select();
|
||||
foreach ($result as $key =>$val){
|
||||
|
||||
$resRank = Db::table("yzy_school_exts")->field('rankOfCn')->where("sch_id",'=',$val['sch_id'])->find();
|
||||
|
||||
Db::table('yzy_school')->where([['id','=',$val['id']],['sch_id','=',$val['sch_id']]])->update(['rankOfCn'=>$resRank['rankOfCn']]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考
|
||||
* 专业数量同步到院校表
|
||||
* */
|
||||
public function majorCountToSch(){
|
||||
set_time_limit(0);
|
||||
$count = Db::table('rec_zhejiang_majors')->count();
|
||||
$num = 100;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_schs')->field("id")->limit($offet, $num)->select();
|
||||
foreach ($result as $key => $val) {
|
||||
$resMajor = Db::table('rec_zhejiang_schs_majors')->field('professions')->where('rec_id', '=', $val['id'])->find();
|
||||
$count = count(json_decode($resMajor['professions']));
|
||||
Db::table('rec_zhejiang_schs')->where('id', '=', $val['id'])->update(['majorNum' => $count]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 院校logo地址查询
|
||||
* */
|
||||
public function getSchoolLogos(){
|
||||
$result = Db::table('yzy_school')->field("sch_id,logo")->select();
|
||||
return api_return('ok',$result);
|
||||
}
|
||||
|
||||
/*
|
||||
* 新高考院校表同步is_yldx,is_ylxk
|
||||
* */
|
||||
|
||||
public function ylxkyldxToNewSch(){
|
||||
set_time_limit(0);
|
||||
$count = Db::table('rec_zhejiang_schs')->count();
|
||||
$num = 1000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_schs')->field("id,collegeId")->limit($offet, $num)->select();
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_yldx,is_ylxk")->where('sch_id', '=', $val['collegeId'])->find();
|
||||
Db::table('rec_zhejiang_schs')->where([['id', '=', $val['id']], ['collegeId', '=', $val['collegeId']]])->update(['is_yldx' => $resSch['is_yldx'], 'is_ylxk' => $resSch['is_ylxk']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 新高考專業表同步is_yldx,is_ylxk
|
||||
* */
|
||||
|
||||
public function ylxkyldxToNewSchMajor(){
|
||||
|
||||
ignore_user_abort(true);
|
||||
ini_set('max_execution_time', '0');
|
||||
set_time_limit(0);
|
||||
$id = Cache::store('redis')->get('NewSchMajorID');
|
||||
if(empty($id)){
|
||||
$id = 3589199;
|
||||
}
|
||||
$count = Db::table('rec_zhejiang_majors')->where('id','>',$id)->count();
|
||||
$num = 1000;//每次导入条数
|
||||
$limit = ceil($count/$num);
|
||||
|
||||
for($i=1;$i<=$limit;$i++) {
|
||||
$offet = ($i - 1) * $num;
|
||||
$result = Db::table('rec_zhejiang_majors')->field("id,collegeId")->where('id','>',$id)->limit($offet, $num)->select();
|
||||
try {
|
||||
foreach ($result as $key => $val) {
|
||||
$resSch = Db::table('yzy_school')->field("is_yldx,is_ylxk")->where('sch_id', '=', $val['collegeId'])->find();
|
||||
Db::table('rec_zhejiang_majors')->where([['id', '=', $val['id']], ['collegeId', '=', $val['collegeId']]])->update(['is_yldx' => $resSch['is_yldx'], 'is_ylxk' => $resSch['is_ylxk']]);
|
||||
Cache::store('redis')->set("NewSchMajorID",$val['id'],72000);
|
||||
|
||||
}
|
||||
}catch (\Exception $exception){
|
||||
\think\facade\Log::error($exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
/**
|
||||
* 系统服务
|
||||
* Class System
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use app\admin\model\SysNode;
|
||||
use app\admin\service\NodeService;
|
||||
use think\facade\Cache;
|
||||
|
||||
|
||||
class System extends AdminController {
|
||||
|
||||
/**
|
||||
* 刷新缓存
|
||||
*/
|
||||
public function refresh() {
|
||||
if (app('cache')->clear()) {
|
||||
echo '缓存刷新成功';
|
||||
return msg_success('缓存刷新成功!');
|
||||
} else {
|
||||
echo '缓存刷新失败';
|
||||
return msg_error('缓存刷新失败!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新节点
|
||||
*/
|
||||
public function refresh_node() {
|
||||
if (!$this->request->isPost()) {
|
||||
//get ajax 访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$node_list = NodeService::refreshNode();
|
||||
if (!empty($node_list)) return __success('节点刷新成功!');
|
||||
return __error('暂无数据变化');
|
||||
}
|
||||
$modules = NodeService::getFolders(env('app_path'));
|
||||
$module_list = [];
|
||||
foreach ($modules as $k => $val) {
|
||||
$node = model('node')->where(['node' => $val, 'type' => 1])->find();
|
||||
!empty($node) ? $module_list[$k] = ['module' => $val, 'title' => $node['title']] : $module_list[$k] = ['module' => $val, 'title' => ''];
|
||||
$val == 'admin' ? $module_list[$k]['is_checked'] = true : $module_list[$k]['is_checked'] = false;
|
||||
}
|
||||
$basic_data = [
|
||||
'title' => '系统节点列表',
|
||||
'module_list' => $module_list,
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
if (empty($post['module'])) return __error('请选中需要刷新节点的模块!');
|
||||
$node_list = NodeService::refreshNode($post['module']);
|
||||
if ($node_list['code'] == 0) {
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
return __success($node_list['msg']);
|
||||
} else {
|
||||
return __error($node_list['msg']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除失效节点
|
||||
* @return \think\response\Json
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function clear_node() {
|
||||
if (!$this->request->isPost()) {
|
||||
$basic_data = [
|
||||
'title' => '清除失效节点',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
} else {
|
||||
$clean = NodeService::cleanNode();
|
||||
if ($clean['code'] == 0) {
|
||||
return __success($clean['msg']);
|
||||
} else {
|
||||
return __error($clean['msg']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
161
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Test.php
Normal file
161
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/Test.php
Normal file
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
// +----------------------------------------------------------------------
|
||||
// | Think.Admin
|
||||
// +----------------------------------------------------------------------
|
||||
// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网站: http://think.ctolog.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | 开源协议 ( https://mit-license.org )
|
||||
// +----------------------------------------------------------------------
|
||||
// | github开源项目:https://github.com/zoujingli/Think.Admin
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
use app\common\service\CurlService;
|
||||
use app\common\service\NodeService;
|
||||
use think\Db;
|
||||
use think\Controller;
|
||||
use think\facade\Env;
|
||||
use think\facade\Cache;
|
||||
|
||||
class Test extends Controller {
|
||||
|
||||
|
||||
/**
|
||||
* 测试
|
||||
*/
|
||||
public function index() {
|
||||
return $this->fetch('');
|
||||
}
|
||||
|
||||
public function upload() {
|
||||
$data = [
|
||||
'cur' => 'complete',
|
||||
'url' => time() . '.jpg',
|
||||
];
|
||||
return json($data);
|
||||
}
|
||||
|
||||
public function test() {
|
||||
$redis = Cache::handler();
|
||||
while (true) {
|
||||
try {
|
||||
$value = $redis->LPOP('click');
|
||||
if (!$value) {
|
||||
break;
|
||||
}
|
||||
echo $value . '<br>';
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function url() {
|
||||
redirect('install/index/index');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function curl() {
|
||||
$test = curl()->Get('http://www.baidu.com');
|
||||
dump($test);
|
||||
}
|
||||
|
||||
|
||||
public function add() {
|
||||
$insert = [
|
||||
'username' => 'admin',
|
||||
'password' => password('bsafe2016'),
|
||||
'id' => '1',
|
||||
'auth_id' => '[]',
|
||||
'status' => 1,
|
||||
];
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
Db::table('system_user')->insert($insert);
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
Db::rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成数据库配置文件
|
||||
* @return array
|
||||
*/
|
||||
private function mkDatabase($data = []) {
|
||||
$code = <<<INFO
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: liu21st <liu21st@gmail.com>
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
// 数据库类型
|
||||
'type' => 'mysql',
|
||||
// 服务器地址
|
||||
'hostname' => '{$data['hostname']}',
|
||||
// 数据库名
|
||||
'database' => '{$data['database']}',
|
||||
// 用户名
|
||||
'username' => '{$data['username']}',
|
||||
// 密码
|
||||
'password' => '{$data['password']}',
|
||||
// 端口
|
||||
'hostport' => '{$data['hostport']}',
|
||||
// 连接dsn
|
||||
'dsn' => '',
|
||||
// 数据库连接参数
|
||||
'params' => [],
|
||||
// 数据库编码默认采用utf8
|
||||
'charset' => 'utf8',
|
||||
// 数据库表前缀
|
||||
'prefix' => '{$data['prefix']}',
|
||||
// 数据库调试模式
|
||||
'debug' => false,
|
||||
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
|
||||
'deploy' => 0,
|
||||
// 数据库读写是否分离 主从式有效
|
||||
'rw_separate' => false,
|
||||
// 读写分离后 主服务器数量
|
||||
'master_num' => 1,
|
||||
// 指定从服务器序号
|
||||
'slave_no' => '',
|
||||
// 是否严格检查字段是否存在
|
||||
'fields_strict' => false,
|
||||
// 数据集返回类型
|
||||
'resultset_type' => 'array',
|
||||
// 自动写入时间戳字段
|
||||
'auto_timestamp' => false,
|
||||
// 时间字段取出后的默认时间格式
|
||||
'datetime_format' => 'Y-m-d H:i:s',
|
||||
// 是否需要进行SQL性能分析
|
||||
'sql_explain' => false,
|
||||
// Builder类
|
||||
'builder' => '',
|
||||
// Query类
|
||||
'query' => '\\think\\db\\Query',
|
||||
];
|
||||
INFO;
|
||||
file_put_contents(Env::get('config_path') . 'database1.php', $code);
|
||||
// 判断写入是否成功
|
||||
$config = include Env::get('config_path') . 'database1.php';
|
||||
if (empty($config['database']) || $config['database'] != $data['database']) {
|
||||
return $this->error('[application/database.php]数据库配置写入失败!');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
258
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/User.php
Normal file
258
芳林公司项目/www.zhiyuanhelp.com/application/admin/controller/User.php
Normal file
@@ -0,0 +1,258 @@
|
||||
<?php
|
||||
/*
|
||||
* 管理员信息管理
|
||||
* */
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
|
||||
|
||||
class User extends AdminController {
|
||||
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = model('user');
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
//ajax访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->userList($page, $limit, $search));
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '管理员列表',
|
||||
'data' => '',
|
||||
];
|
||||
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加管理员
|
||||
* @return mixed
|
||||
*/
|
||||
public function add() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '添加管理员',
|
||||
'auth' => model('auth')->getList(),
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
!isset($post['auth_id']) && $post['auth_id'] = [];
|
||||
//数组转json
|
||||
$post['auth_id'] = json_encode($post['auth_id']);
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\User.add');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
$post['password'] = password($post['password']);
|
||||
return $this->model->add($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改管理员信息
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function edit() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需修改用户
|
||||
$user = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if (empty($user)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
$auth = model('auth')->getList()->toArray();
|
||||
|
||||
$auth_id = json_decode($user['auth_id'], true);
|
||||
|
||||
foreach ($auth as $k => $val) {
|
||||
$is_checked = false;
|
||||
foreach ($auth_id as $k_1) $val['id'] == $k_1 && $is_checked = true;
|
||||
$auth[$k]['is_checked'] = $is_checked;
|
||||
}
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '修改管理员信息',
|
||||
'user' => $user->hidden(['password']),
|
||||
'auth' => $auth,
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->form();
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
!isset($post['auth_id']) && $post['auth_id'] = [];
|
||||
//数组转json
|
||||
$post['auth_id'] = json_encode($post['auth_id']);
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\User.edit');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->edit($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单模板
|
||||
* @return mixed
|
||||
*/
|
||||
protected function form() {
|
||||
return $this->fetch('form');
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员的删除
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function del() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
if (!is_array($get['id'])) {
|
||||
$validate = $this->validate($get, 'app\admin\validate\User.del');
|
||||
if (true !== $validate) return __error($validate);
|
||||
}
|
||||
|
||||
//执行删除操作
|
||||
if (!is_array($get['id'])) {
|
||||
$del = $this->model->where('id', $get['id'])->update(['is_deleted' => 1]);
|
||||
} else {
|
||||
$del = $this->model->whereIn('id', $get['id'])->update(['is_deleted' => 1]);
|
||||
}
|
||||
|
||||
if ($del >= 1) {
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
return __success('删除成功!');
|
||||
} else {
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户密码
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function edit_password() {
|
||||
if (!$this->request->isPost()) {
|
||||
if (empty($this->request->get('id'))) return msg_error('暂无用户信息!');
|
||||
$where_user = [
|
||||
'id' => $this->request->get('id'),
|
||||
'is_deleted' => 0,
|
||||
];
|
||||
$user = $this->model->where($where_user)->field('id, username')->find();
|
||||
if (empty($user)) return msg_error('暂无用户信息,请关闭页面刷新重试!');
|
||||
$basic_data = [
|
||||
'title' => '修改管理员密码',
|
||||
'user' => $user,
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\User.edit_password');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//修改密码数据
|
||||
return $this->model->editPassword($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改管理员状态
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function status() {
|
||||
$get = $this->request->get();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($get, 'app\admin\validate\User.status');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//判断管理员状态
|
||||
$status = $this->model->where('id', $get['id'])->value('status');
|
||||
$status == 1 ? list($msg, $status) = ['禁用成功', $status = 0] : list($msg, $status) = ['启用成功', $status = 1];
|
||||
|
||||
//执行更新操作操作
|
||||
$update = $this->model->where('id', $get['id'])->update(['status' => $status]);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
if ($update >= 1) return __success($msg);
|
||||
return __error('数据有误,请刷新重试!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改自己的信息
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function edit_self() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需修改用户
|
||||
$user = $this->model->where('id', $this->user['id'])->find();
|
||||
if (empty($user)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '修改管理员信息',
|
||||
'user' => $user->hidden(['password']),
|
||||
];
|
||||
$this->assign($basic_data);
|
||||
|
||||
return $this->fetch('form_self');
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\User.editSelf');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//清空菜单缓存
|
||||
clear_menu();
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editSelf($post);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
44e9deb2-eea3-4463-8100-5169958e89b1
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2018/10/1
|
||||
* Time: 1:10
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\api;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
|
||||
|
||||
/**
|
||||
* 后台公共接口
|
||||
* Class Common
|
||||
* @package app\api\controller\admin
|
||||
*/
|
||||
class Common extends AdminController {
|
||||
|
||||
/**
|
||||
* 获取菜单接口
|
||||
*/
|
||||
public function getMenu() {
|
||||
$SysInfo = Cache::get('SysInfo');
|
||||
|
||||
if (!isset($SysInfo['AdminModuleName'])) {
|
||||
return __error('后台绑定模块名数据有误,请刷新缓存或修改数据库配置!');
|
||||
}
|
||||
$this->redirect(url("{$SysInfo['AdminModuleName']}.php\api.menu\getMenu"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开图片上传窗口
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function uploadIamge($type = 'one') {
|
||||
$SysInfo = Cache::get('SysInfo');
|
||||
if (!isset($SysInfo['AdminModuleName'])) {
|
||||
return __error('后台绑定模块名数据有误,请刷新缓存或修改数据库配置!');
|
||||
}
|
||||
$this->redirect(url("{$SysInfo['AdminModuleName']}.php\\tool.upload\image") . "?type=" . $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 后台刷新缓存接口
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function clearCache() {
|
||||
if (app('cache')->clear()) {
|
||||
return __success('缓存刷新成功!');
|
||||
} else {
|
||||
return __error('缓存刷新失败!');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/*
|
||||
* 菜单控制接口
|
||||
* */
|
||||
|
||||
namespace app\admin\controller\api;
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\facade\Cache;
|
||||
|
||||
class Menu extends AdminController
|
||||
{
|
||||
|
||||
/**
|
||||
* 根据权限规则生成菜单栏数据
|
||||
* @return \think\response\Json
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getMenu()
|
||||
{
|
||||
if (!empty(Cache::tag('menu')->get(session('user.id') . '_AdminMenu'))) {
|
||||
return json(Cache::get(session('user.id') . '_AdminMenu'));
|
||||
} else {
|
||||
$menu_list = \app\admin\model\Menu::getMenuApi();
|
||||
Cache::tag('menu')->set(session('user.id') . '_AdminMenu', $menu_list, 86400);
|
||||
return json($menu_list);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取顶部菜单栏
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getNav()
|
||||
{
|
||||
if (!empty(Cache::tag('menu')->get(session('user.id') . '_AdminMenu'))) {
|
||||
$menu_list = Cache::get(session('user.id') . '_AdminMenu');
|
||||
} else {
|
||||
$menu_list = \app\admin\model\Menu::getMenuApi();
|
||||
Cache::tag('menu')->set(session('user.id') . '_AdminMenu', $menu_list, 86400);
|
||||
}
|
||||
$memu_id_list = [];
|
||||
foreach ($menu_list as $key => $val) {
|
||||
$menu_id = explode("66ysx_", $key);
|
||||
isset($menu_id[1]) && $memu_id_list[] = $menu_id[1];
|
||||
}
|
||||
$nav = model('menu')->whereIn('id', $memu_id_list)->field('id, title, icon')
|
||||
->order([
|
||||
'sort' => 'asc',
|
||||
'create_at' => 'asc',
|
||||
])->select();
|
||||
foreach ($nav as $key => $val) {
|
||||
(strpos($nav[$key]['icon'], 'fa-') !== false) ? $nav[$key]['icon_type'] = true : $nav[$key]['icon_type'] = false;
|
||||
}
|
||||
return $nav;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* 系统节点接口
|
||||
* */
|
||||
namespace app\admin\controller\api;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
class Node extends AdminController {
|
||||
|
||||
/**
|
||||
* 获取对应角色的节点数据
|
||||
* @param $id
|
||||
* @return \think\response\Json
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getNodeTree($id) {
|
||||
$list = [];
|
||||
$module = model('node')->where(['type' => 1, 'is_auth' => 1])->order(['node' => 'asc'])->select();
|
||||
foreach ($module as $k => $val) {
|
||||
$list[$k] = [
|
||||
'title' => $this->__biuldGetNodeTree($val['node'], $val['title']),
|
||||
'value' => $val['id'],
|
||||
'data' => [],
|
||||
];
|
||||
$is_checked = model('auth_node')->where(['auth' => $id, 'node' => $val['id']])->find();
|
||||
!empty($is_checked) && $list[$k]['checked'] = true;
|
||||
$data_1 = model('node')->where([['type', '=', 2], ['is_auth', '=', 1], ['node', 'LIKE', "{$val['node']}/%"]])->select();
|
||||
foreach ($data_1 as $k_1 => $val_1) {
|
||||
$list[$k]['data'][$k_1] = [
|
||||
'title' => $this->__biuldGetNodeTree($val_1['node'], $val_1['title']),
|
||||
'value' => $val_1['id'],
|
||||
'data' => [],
|
||||
];
|
||||
$is_checked_1 = model('auth_node')->where(['auth' => $id, 'node' => $val_1['id']])->find();
|
||||
!empty($is_checked_1) && $list[$k]['data'][$k_1]['checked'] = true;
|
||||
$data_2 = model('node')->where([['type', '=', 3], ['is_auth', '=', 1], ['node', 'LIKE', "{$val_1['node']}/%"]])->select();
|
||||
foreach ($data_2 as $k_2 => $val_2) {
|
||||
$list[$k]['data'][$k_1]['data'][$k_2] = [
|
||||
'title' => $this->__biuldGetNodeTree($val_2['node'], $val_2['title']),
|
||||
'value' => $val_2['id'],
|
||||
'data' => [],
|
||||
];
|
||||
$is_checked_2 = model('auth_node')->where(['auth' => $id, 'node' => $val_2['id']])->find();
|
||||
!empty($is_checked_2) && $list[$k]['data'][$k_1]['data'][$k_2]['checked'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return json($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组合数据
|
||||
* @param $node
|
||||
* @param $title
|
||||
* @return string
|
||||
*/
|
||||
protected function __biuldGetNodeTree($node, $title) {
|
||||
if (empty($title)) return $node;
|
||||
else return $title . '【' . $node . '】';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* 后台上传通用接口
|
||||
* Class Upload
|
||||
* @package app\admin\controller\api
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\api;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use app\admin\service\QiniuService;
|
||||
use think\Db;
|
||||
|
||||
|
||||
class Upload extends AdminController {
|
||||
|
||||
/**
|
||||
* 编辑器多图片上传
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function image() {
|
||||
$files = request()->file();
|
||||
if (is_array($files)) {
|
||||
foreach ($files as $vo) {
|
||||
$info = $vo->move('../public/static/uploads');
|
||||
if ($info) {
|
||||
$url[] = '/static/uploads/' . date('Ymd') . '/' . $info->getFilename();
|
||||
} else {
|
||||
return json(['code' => 1, 'msg' => $vo->getError()]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$info = $files->move('../public/static/uploads');
|
||||
if ($info) {
|
||||
$url[] = '/static/uploads/' . date('Ymd') . '/' . $info->getFilename();
|
||||
} else {
|
||||
return json(['code' => 1, 'msg' => $files->getError()]);
|
||||
}
|
||||
}
|
||||
//判断是否使用七牛云上传
|
||||
$file_type = Db::name('SystemConfig')->where(['name' => 'FileType', 'group' => 'file'])->value('value');
|
||||
if ($file_type == 2) {
|
||||
foreach ($url as &$vo) {
|
||||
$vo = QiniuService::upload($vo);
|
||||
}
|
||||
}
|
||||
return json(['code' => 0, 'msg' => '上传成功!', 'url' => $url]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* 欢迎页接口
|
||||
* Class Welcome
|
||||
* @package app\admin\controller\api
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\api;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
|
||||
class Welcome extends AdminController {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
abd2f604-0e26-4a3e-ae75-60639c9df448
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/24
|
||||
* Time: 15:05
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\custom;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
class Message extends AdminController
|
||||
{
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = new \app\admin\model\costom\Message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 留言建议列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
//ajax访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->messageList($page, $limit, $search));
|
||||
}
|
||||
|
||||
$basic_data = [
|
||||
'title' => '留言建议列表',
|
||||
'data' => '',
|
||||
];
|
||||
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 留言回复
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function reply() {
|
||||
if (!$this->request->isPost()) {
|
||||
|
||||
//查找所需修改的数据
|
||||
$data = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if($data['img1']){
|
||||
$data['img1'] = config('secure.mpic_url'). $data['img1'];
|
||||
}
|
||||
if($data['img2']){
|
||||
$data['img2'] = config('secure.mpic_url'). $data['img2'];
|
||||
}
|
||||
|
||||
if (empty($data)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '工单回复',
|
||||
'result' => $data,
|
||||
];
|
||||
return $this->fetch('form', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
$post['reply_time'] = time();
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\custom\Message.reply');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->reply($post);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/24
|
||||
* Time: 11:25
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\custom;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\Db;
|
||||
use app\admin\model\costom\Order as OrderModel;
|
||||
class Order extends AdminController
|
||||
{
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = new \app\admin\model\costom\Order;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
//ajax访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->orderList($page, $limit, $search));
|
||||
}
|
||||
//获取配置表的省份数据
|
||||
$resProvince = config('province.province');
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '订单列表',
|
||||
'resProvince' => $resProvince,
|
||||
'data' => '',
|
||||
];
|
||||
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* 订单详情
|
||||
* */
|
||||
|
||||
public function details(){
|
||||
//订单商品列表
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$id = $this->request->get('user_id');
|
||||
$result = Db::table('orders')->where('user_id','=',$id)->limit(30)->select();
|
||||
|
||||
empty($result) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
//获取配置权限名称
|
||||
$vipNameArr = config('product.vipName');
|
||||
foreach($result as $key => $val){
|
||||
$result[$key]['vipName'] = $vipNameArr[$val['vip']];
|
||||
$result[$key]['add_time'] = date('Y-m-d H:i:s',$val['add_time']);
|
||||
if($val['pay_time']){
|
||||
$result[$key]['pay_time'] = date('Y-m-d H:i:s',$val['pay_time']);
|
||||
}
|
||||
$val['wenli'] = $val['wenli'] = config('setSub.subTypeName')[$val['wenli']];
|
||||
//拼接用户信息
|
||||
$result[$key]['userInfo'] = $val['province_title']."_".$val['score']."_".$val['wenli']."_".$val['mykemustr'];
|
||||
|
||||
}
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'data' => $result
|
||||
];
|
||||
|
||||
return json($list);
|
||||
}
|
||||
$id = $this->request->get('id',0);
|
||||
|
||||
$basic_data = [
|
||||
'title' => '订单详情列表',
|
||||
'data' => '',
|
||||
'user_id' => $id
|
||||
];
|
||||
|
||||
$this->assign($basic_data);
|
||||
return $this->fetch('custom/student/details');
|
||||
}
|
||||
|
||||
/*
|
||||
* 订单退款
|
||||
* */
|
||||
public function refundOrder(){
|
||||
$post = $this->request->post();
|
||||
$validate = $this->validate($post, 'app\admin\validate\custom\Student.refundOrder');
|
||||
if (true !== $validate){
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $validate
|
||||
];
|
||||
return $list;
|
||||
exit;
|
||||
};
|
||||
|
||||
$result = OrderModel::orderRefund($post);
|
||||
|
||||
if($result){
|
||||
$list = [
|
||||
'code' => 1,
|
||||
'msg' => '退款成功!'
|
||||
];
|
||||
}else{
|
||||
$list = [
|
||||
'code' => 2,
|
||||
'msg' => '退款失败!'
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/25
|
||||
* Time: 15:09
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\custom;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\Db;
|
||||
|
||||
class Proscore extends AdminController
|
||||
{
|
||||
/**
|
||||
* 默认模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = new \app\admin\model\costom\Proscore();
|
||||
}
|
||||
|
||||
/**
|
||||
* 省控分數列表
|
||||
* @return mixed|\think\response\Json
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function index() {
|
||||
if (!$this->request->isPost()) {
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->getList($page, $limit, $search));
|
||||
}
|
||||
//获取配置表的省份数据
|
||||
$resProvince = config('province.province');
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '省控分数列表',
|
||||
'resProvince' => $resProvince,
|
||||
'data' => '',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 添加
|
||||
* @return mixed
|
||||
*/
|
||||
public function add() {
|
||||
if (!$this->request->isPost()) {
|
||||
$province_list = config('province.province');
|
||||
$basic_data = [
|
||||
'province_list' => $province_list,
|
||||
'title' => '添加',
|
||||
];
|
||||
return $this->fetch('form', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\custom\Proscore.add');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->addData($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* @return mixed|string|\think\response\Json
|
||||
*/
|
||||
public function edit() {
|
||||
if (!$this->request->isPost()) {
|
||||
$province_list = config('province.province');
|
||||
//查找所需修改的数据
|
||||
$data = $this->model->where('id', $this->request->get('id'))->find();
|
||||
if (empty($data)) return msg_error('暂无数据,请重新刷新页面!');
|
||||
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '修改信息',
|
||||
'res' => $data,
|
||||
'province_list'=> $province_list
|
||||
];
|
||||
return $this->fetch('form', $basic_data);
|
||||
} else {
|
||||
$post = $this->request->post();
|
||||
//验证数据
|
||||
$validate = $this->validate($post, 'app\admin\validate\custom\Proscore.edit');
|
||||
if (true !== $validate) return __error($validate);
|
||||
|
||||
//保存数据,返回结果
|
||||
return $this->model->editData($post);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function del() {
|
||||
$get = $this->request->get();
|
||||
//验证数据
|
||||
if (!is_array($get['id'])) {
|
||||
$validate = $this->validate($get, 'app\admin\validate\custom\Proscore.del');
|
||||
if (true !== $validate) return __error($validate);
|
||||
}
|
||||
|
||||
//执行删除操作
|
||||
return $this->model->delData($get['id'], true);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/23
|
||||
* Time: 8:53
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\custom;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
use think\Db;
|
||||
use app\admin\model\costom\Order;
|
||||
class Student extends AdminController
|
||||
{
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* User constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->model = new \app\admin\model\costom\User;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 用戶列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
//ajax访问
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$page = $this->request->get('page', 1);
|
||||
$limit = $this->request->get('limit', 10);
|
||||
$search = (array)$this->request->get('search', []);
|
||||
return json($this->model->userList($page, $limit, $search));
|
||||
}
|
||||
//获取配置表的省份数据
|
||||
$resProvince = config('province.province');
|
||||
//基础数据
|
||||
$basic_data = [
|
||||
'title' => '用戶列表',
|
||||
'resProvince' => $resProvince,
|
||||
'data' => '',
|
||||
];
|
||||
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* 订单详情
|
||||
* */
|
||||
|
||||
public function details(){
|
||||
//订单商品列表
|
||||
if ($this->request->get('type') == 'ajax') {
|
||||
$id = $this->request->get('user_id');
|
||||
$result = Db::table('orders')->where('user_id','=',$id)->limit(30)->select();
|
||||
|
||||
empty($result) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
//获取配置权限名称
|
||||
$vipNameArr = config('product.vipName');
|
||||
foreach($result as $key => $val){
|
||||
$result[$key]['vipName'] = $vipNameArr[$val['vip']];
|
||||
$result[$key]['add_time'] = date('Y-m-d H:i:s',$val['add_time']);
|
||||
if($val['pay_time']){
|
||||
$result[$key]['pay_time'] = date('Y-m-d H:i:s',$val['pay_time']);
|
||||
}
|
||||
$val['wenli'] = $val['wenli'] = config('setSub.subTypeName')[$val['wenli']];
|
||||
//拼接用户信息
|
||||
$result[$key]['userInfo'] = $val['province_title']."_".$val['score']."_".$val['wenli']."_".$val['mykemustr'];
|
||||
|
||||
}
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'data' => $result
|
||||
];
|
||||
|
||||
return json($list);
|
||||
}
|
||||
$id = $this->request->get('id',0);
|
||||
|
||||
$basic_data = [
|
||||
'title' => '订单详情列表',
|
||||
'data' => '',
|
||||
'user_id' => $id
|
||||
];
|
||||
|
||||
$this->assign($basic_data);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/*
|
||||
* 订单退款
|
||||
* */
|
||||
public function refundOrder(){
|
||||
$post = $this->request->post();
|
||||
$validate = $this->validate($post, 'app\admin\validate\custom\Student.refundOrder');
|
||||
if (true !== $validate){
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $validate
|
||||
];
|
||||
return $list;
|
||||
exit;
|
||||
};
|
||||
|
||||
$result = Order::orderRefund($post);
|
||||
|
||||
if($result){
|
||||
$list = [
|
||||
'code' => 1,
|
||||
'msg' => '退款成功!'
|
||||
];
|
||||
}else{
|
||||
$list = [
|
||||
'code' => 2,
|
||||
'msg' => '退款失败!'
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
69df9137-96a1-4de5-a0ee-79d0e3e649fd
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2018/10/15
|
||||
* Time: 21:51
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\tool;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
/**
|
||||
* 图标管理
|
||||
* Class Icon
|
||||
* @package app\admin\controller
|
||||
*/
|
||||
class Icon extends AdminController {
|
||||
|
||||
/**
|
||||
* 图标列表
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
$basic_data = [
|
||||
'title' => '图标列表',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
|
||||
public function fa(){
|
||||
$basic_data = [
|
||||
'title' => 'fa图标列表',
|
||||
];
|
||||
return $this->fetch('', $basic_data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2018/10/15
|
||||
* Time: 21:58
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\tool;
|
||||
|
||||
|
||||
use app\admin\controller\AdminController;
|
||||
|
||||
/**
|
||||
* 上传图片插件
|
||||
* Class Upload
|
||||
* @package app\admin\controller\tool
|
||||
*/
|
||||
class Upload extends AdminController {
|
||||
|
||||
/**
|
||||
* 上传图片
|
||||
* @param string $type ['multi','one']
|
||||
* @return mixed
|
||||
*/
|
||||
public function image($type = 'one') {
|
||||
return $this->fetch('', ['type' => $type]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
4bd183af-4f0c-4a12-9e0b-6a6be05cb63e
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
/*
|
||||
* 文章模型
|
||||
* */
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
|
||||
class Article {
|
||||
|
||||
}
|
||||
124
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Auth.php
Normal file
124
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Auth.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
* 权限组模型
|
||||
* Class Auth
|
||||
* @package app\admin\model
|
||||
*/
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
|
||||
class Auth extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定的数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_auth';
|
||||
|
||||
/**
|
||||
* 获取权限组
|
||||
* @return array|\PDOStatement|string|\think\Collection
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getList() {
|
||||
$where_auth = [
|
||||
['status', '=', 1],
|
||||
];
|
||||
$order_auth = [
|
||||
'id' => 'asc',
|
||||
];
|
||||
$auth = $this->where($where_auth)->field('id, title, status')->order($order_auth)->select();
|
||||
return $auth;
|
||||
}
|
||||
|
||||
/**
|
||||
* 权限角色列表
|
||||
* @param int $page
|
||||
* @param int $limit
|
||||
* @param array $search
|
||||
* @param array $where
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function authList($page = 1, $limit = 10, $search = [], $where = []) {
|
||||
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if ($key == 'status' && $value != '') {
|
||||
$where[] = [$key, '=', $value];
|
||||
} elseif ($key == 'create_at' && $value != '') {
|
||||
$value_list = explode(" - ", $value);
|
||||
$where[] = [$key, 'BETWEEN', ["{$value_list[0]} 00:00:00", "{$value_list[1]} 23:59:59"]];
|
||||
} else {
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
|
||||
$field = 'id, title , remark, status, sort, create_at';
|
||||
$count = $this->where($where)->count();
|
||||
$data = $this->where($where)->field($field)->page($page, $limit)->order(['sort asc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存节点
|
||||
* @param $insert
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function add($insert) {
|
||||
$save = $this->save($insert);
|
||||
if ($save == 1) {
|
||||
return __success('保存成功!');
|
||||
} else {
|
||||
return __error('保存失败!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新节点
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit($update) {
|
||||
$data = $this->where('id', $update['id'])->update($update);
|
||||
if ($data == 1) {
|
||||
return __success('更新成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改系统节点字段值
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit_field($update) {
|
||||
$data = $this->where('id', $update['id'])->update([$update['field'] => $update['value']]);
|
||||
if ($data == 1) {
|
||||
return __success('修改成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/*
|
||||
*权限节点模型
|
||||
* */
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class AuthNode extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定的数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_auth_node';
|
||||
|
||||
/**
|
||||
* 保存授权信息
|
||||
* @param $insertAll
|
||||
* @return \think\response\Json
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function authorize($insertAll) {
|
||||
$save = $this->saveAll($insertAll);
|
||||
if (!empty($save)) return __success('保存成功!');
|
||||
return __error('保存失败');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/**
|
||||
* 系统配置模板
|
||||
*/
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
|
||||
/**
|
||||
* 系统配置信息
|
||||
* Class Config
|
||||
* @package app\admin\model
|
||||
*/
|
||||
class Config extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_config';
|
||||
|
||||
/**
|
||||
* 获取系统基础配置信息
|
||||
* @return array|\PDOStatement|string|\think\Collection
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getBasicConfig() {
|
||||
$basic = $this->where('group', 'basic')->column('name,value');
|
||||
return $basic;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统配置列表
|
||||
* @param int $page
|
||||
* @param int $limit
|
||||
* @param array $search
|
||||
* @param array $where
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function configList($page = 1, $limit = 500, $search = [], $where = []) {
|
||||
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
|
||||
$field = 'id, group , name, value, remark, sort, create_at';
|
||||
$count = $this->where($where)->count();
|
||||
$data = $this->where($where)->field($field)->order(['sort asc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改字段值
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit_field($update) {
|
||||
$data = $this->where('id', $update['id'])->update([$update['field'] => $update['value']]);
|
||||
if ($data == 1) {
|
||||
return __success('修改成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
}
|
||||
301
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Menu.php
Normal file
301
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Menu.php
Normal file
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
/*
|
||||
* 菜单模型
|
||||
* */
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class Menu extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_menu';
|
||||
|
||||
/**
|
||||
* 新增菜单数据
|
||||
* @param $insert
|
||||
* @return \think\response\Json
|
||||
* @throws \think\exception\PDOException
|
||||
*/
|
||||
public function add($insert) {
|
||||
//使用事物保存数据
|
||||
$this->startTrans();
|
||||
$save = $this->save($insert);
|
||||
if (!$save) {
|
||||
$this->rollback();
|
||||
return __error('数据有误,请稍后再试!');
|
||||
}
|
||||
$this->commit();
|
||||
return __success('菜单添加成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改菜单数据
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit($update) {
|
||||
$data = $this->where('id', $update['id'])->update($update);
|
||||
if ($data == 1) {
|
||||
return __success('菜单更新成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取首页信息
|
||||
* @return array|null|\PDOStatement|string|\think\Model
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getHome() {
|
||||
$where_home = [
|
||||
['id', '=', 1],
|
||||
['status', '=', 1],
|
||||
];
|
||||
$home = $this->field('id, title, icon, href')->where($where_home)->find();
|
||||
!empty($home) && $home['href'] = url($home['href']);
|
||||
return $home;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单栏头部
|
||||
* @return array|\PDOStatement|string|\think\Collection
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function getNav() {
|
||||
$where_nav = [
|
||||
['id', '<>', 1],
|
||||
['pid', '=', 0],
|
||||
['status', '=', 1],
|
||||
];
|
||||
$order_nav = [
|
||||
'sort' => 'asc',
|
||||
'create_at' => 'asc',
|
||||
];
|
||||
|
||||
//查询顶级菜单栏数据
|
||||
$nav = self::field('id, title, icon')->where($where_nav)->order($order_nav)->select();
|
||||
|
||||
//去除空菜单
|
||||
foreach ($nav as $k => $val) {
|
||||
$menu = self::where(['pid' => $nav[$k]['id'], 'status' => 1])->select()->toArray();
|
||||
if (empty($menu)) unset($nav[$k]);
|
||||
}
|
||||
|
||||
//判断图标类型
|
||||
foreach ($nav as $key => $val) (strpos($nav[$key]['icon'], 'fa-') !== false) ? $nav[$key]['icon_type'] = true : $nav[$key]['icon_type'] = false;
|
||||
|
||||
return $nav;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单栏数据
|
||||
* @param array $search 搜索条件
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function menuList($search = [], $where = []) {
|
||||
if (empty($search)) {
|
||||
$menu_list = $this->getMenu();
|
||||
empty($menu_list) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => count($menu_list),
|
||||
'data' => $menu_list,
|
||||
];
|
||||
} else {
|
||||
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if ($key == 'status' && $value != '') {
|
||||
$where[] = [$key, '=', $value];
|
||||
} elseif ($key == 'create_at' && $value != '') {
|
||||
$value_list = explode(" - ", $value);
|
||||
$where[] = [$key, 'BETWEEN', ["{$value_list[0]} 00:00:00", "{$value_list[1]} 23:59:59"]];
|
||||
} else {
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
|
||||
$menu_list = $this->where($where)->order(['pid' => 'asc', 'sort' => 'asc', 'create_at' => 'desc'])->select();
|
||||
empty($menu_list) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
|
||||
//修改菜单栏数据格式
|
||||
$this->__buildMenu($menu_list);
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => count($menu_list),
|
||||
'data' => $menu_list,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改搜索菜单栏数据格式
|
||||
* @param $list
|
||||
* @param int $i
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function __buildMenu(&$list) {
|
||||
foreach ($list as &$vo) {
|
||||
$i = 1;
|
||||
if ($vo['pid'] != 0) {
|
||||
$i++;
|
||||
$nav = $this->where('id', $vo['pid'])->find();
|
||||
!empty($nav) && ($nav['pid'] != 0 && $i++);
|
||||
}
|
||||
$vo['title'] = replace_menu_title($vo['title'], $i);
|
||||
($vo['id'] == 1 || $i >= 3) ? $vo['is_add'] = false : $vo['is_add'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用回调获取菜单栏数据
|
||||
* @param int $pid 上级id
|
||||
* @param array $menu 菜单数据
|
||||
* @param int $i 序号
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getMenu($pid = 0, &$menu = [], $i = 0) {
|
||||
$i++;
|
||||
$field = 'id, pid, title, icon, href, target, sort, status, create_at, create_by';
|
||||
$where_nav = [
|
||||
['pid', '=', $pid],
|
||||
];
|
||||
$order = [
|
||||
'sort' => 'asc',
|
||||
'create_at' => 'desc',
|
||||
];
|
||||
$nav = $this->field($field)->where($where_nav)->order($order)->select();
|
||||
foreach ($nav as $vo) {
|
||||
($vo['id'] == 1 || $i >= 3) ? $vo['is_add'] = false : $vo['is_add'] = true;
|
||||
$vo['title'] = replace_menu_title($vo['title'], $i);
|
||||
$menu[] = $vo;
|
||||
$this->getMenu($vo['id'], $menu, $i);
|
||||
}
|
||||
return $menu;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建菜单时获取上级的菜单
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function getUpMenu() {
|
||||
$field = 'id, pid, title';
|
||||
$where_nav = [
|
||||
['id', '<>', 1],
|
||||
['pid', '=', 0],
|
||||
];
|
||||
$order = [
|
||||
'sort' => 'asc',
|
||||
'create_at' => 'desc',
|
||||
];
|
||||
|
||||
//最顶级
|
||||
$first_list = $this->where($where_nav)->field($field)->order($order)->select();
|
||||
|
||||
//组合菜单数据
|
||||
$menu_list[] = [
|
||||
'id' => 0,
|
||||
'pid' => 0,
|
||||
'title' => '顶级菜单',
|
||||
];
|
||||
foreach ($first_list as &$vo) {
|
||||
$vo['title'] = replace_menu_title($vo['title'], 1);
|
||||
$menu_list[] = $vo;
|
||||
$where_second = [['pid', '=', $vo['id']]];
|
||||
$second_list = $this->where($where_second)->field($field)->order($order)->select();
|
||||
foreach ($second_list as &$vl) {
|
||||
$vl['title'] = replace_menu_title($vl['title'], 2);
|
||||
$menu_list[] = $vl;
|
||||
}
|
||||
}
|
||||
return $menu_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统导航菜单
|
||||
* @param array $menu_list
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function getMenuApi($menu_list = []) {
|
||||
$field = 'id, pid, title, icon, href, spread, target';
|
||||
$order = ['sort' => 'asc', 'create_at' => 'desc'];
|
||||
|
||||
$nav = self::getNav()->toArray();
|
||||
foreach ($nav as $vo) {
|
||||
$i = 0;
|
||||
$where_first_menu = [['pid', '=', $vo['id']], ['status', '=', 1]];
|
||||
$first_menu = self::field($field)->where($where_first_menu)->order($order)->select()->toArray();
|
||||
foreach ($first_menu as $vo_1) {
|
||||
if (auth($vo_1['href'])) {
|
||||
if (!empty($vo_1['href']) && $vo_1['href'] != "#") {
|
||||
$vo_1['href'] = url($vo_1['href']);
|
||||
}
|
||||
$vo_1['spread'] = (bool)$vo_1['spread'];
|
||||
$menu_list['66ysx_' . $vo['id']][$i] = $vo_1;
|
||||
$where_second_menu = [['pid', '=', $vo_1['id']], ['status', '=', 1]];
|
||||
$second_menu = self::field($field)->where($where_second_menu)->order($order)->select()->toArray();
|
||||
foreach ($second_menu as $vo_2) {
|
||||
if (auth($vo_2['href'])) {
|
||||
if (!empty($vo_2['href']) && $vo_2['href'] != "#") {
|
||||
$vo_2['href'] = url($vo_2['href']);
|
||||
}
|
||||
$vo_2['spread'] = (bool)$vo_2['spread'];
|
||||
$menu_list['66ysx_' . $vo['id']][$i]['children'][] = $vo_2;
|
||||
}
|
||||
}
|
||||
//去除空菜单
|
||||
if (!isset($menu_list['66ysx_' . $vo['id']][$i]['children'])) {
|
||||
if ($menu_list['66ysx_' . $vo['id']][$i]['href'] == '#' || $menu_list['66ysx_' . $vo['id']][$i]['href'] == '') {
|
||||
unset($menu_list['66ysx_' . $vo['id']][$i]);
|
||||
} else {
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_filter($menu_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新字段值
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit_field($update) {
|
||||
$data = $this->where('id', $update['id'])->update([$update['field'] => $update['value']]);
|
||||
if ($data == 1) {
|
||||
return __success('修改成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
}
|
||||
35
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Nav.php
Normal file
35
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Nav.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/*
|
||||
* 导航模型
|
||||
* */
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class Nav extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_nav';
|
||||
|
||||
/**
|
||||
* 获取快捷导航
|
||||
* @param int $limit
|
||||
* @return array|\PDOStatement|string|\think\Collection
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function getQuickNav($limit = 6) {
|
||||
$list = self::where(['status' => 1])->order(['sort' => 'desc', 'create_at' => 'desc'])
|
||||
->limit($limit)->select()->each(function ($item, $key) {
|
||||
$item['href'] = url($item['href']);
|
||||
});
|
||||
return $list;
|
||||
}
|
||||
|
||||
}
|
||||
142
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Node.php
Normal file
142
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/Node.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/*
|
||||
* 节点模型
|
||||
* */
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class Node extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定的数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_node';
|
||||
|
||||
/**
|
||||
* 节点列表
|
||||
* @param int $page 当前页
|
||||
* @param int $limit 每页显示数量
|
||||
* @param array $search 搜索条件 (array)
|
||||
* @param array $where 组成的条件
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function nodeList($page = 1, $limit = 10, $search = [], $where = []) {
|
||||
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if ($key == 'is_auth' && $value != '') {
|
||||
$where[] = [$key, '=', $value];
|
||||
} elseif ($key == 'create_at' && $value != '') {
|
||||
$value_list = explode(" - ", $value);
|
||||
$where[] = [$key, 'BETWEEN', ["{$value_list[0]} 00:00:00", "{$value_list[1]} 23:59:59"]];
|
||||
} else {
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
|
||||
$field = 'id, node, title , is_auth, create_at';
|
||||
$count = $this->where($where)->count();
|
||||
$data = $this->where($where)->field($field)->page($page, $limit)->order(['node asc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存节点
|
||||
* @param $insert
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function add($insert) {
|
||||
$save = $this->save($insert);
|
||||
if ($save == 1) {
|
||||
return __success('保存成功!');
|
||||
} else {
|
||||
return __error('保存失败!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新节点
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit($update) {
|
||||
$data = $this->where('id', $update['id'])->update($update);
|
||||
if ($data == 1) {
|
||||
return __success('更新成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改系统节点字段值
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit_field($update) {
|
||||
$data = $this->where('id', $update['id'])->update([$update['field'] => $update['value']]);
|
||||
if ($data == 1) {
|
||||
return __success('修改成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据模块名称获取节点
|
||||
* @param $module
|
||||
* @param array $node_list
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function nodeModuleList($module, $node_list = []) {
|
||||
$modules = $this->where(['type' => 1, 'node' => $module])->order(['node'=>'asc'])->select()->toArray();
|
||||
foreach ($modules as &$vo_m) {
|
||||
$i = 1;
|
||||
$vo_module = $vo_m;
|
||||
$vo_module['node'] = replace_menu_title($vo_module['node'], $i);
|
||||
$node_list[] = $vo_module;
|
||||
$controller = $this->where([['type', '=', 2], ['node', 'LIKE', "{$vo_m['node']}/%"]])->order(['node'=>'asc'])->select()->toArray();
|
||||
foreach ($controller as &$vo_c) {
|
||||
$i = 2;
|
||||
$vo_controller = $vo_c;
|
||||
$vo_controller['node'] = replace_menu_title($vo_controller['node'], $i);
|
||||
$node_list[] = $vo_controller;
|
||||
$action = $this->where([['type', '=', 3], ['node', 'LIKE', "{$vo_c['node']}/%"]])->order(['node'=>'asc'])->select()->toArray();
|
||||
foreach ($action as &$vo_a) {
|
||||
$i = 3;
|
||||
$vo_action = $vo_a;
|
||||
$vo_action['node'] = replace_menu_title($vo_action['node'], $i);
|
||||
$node_list[] = $vo_action;
|
||||
}
|
||||
}
|
||||
}
|
||||
return [
|
||||
'code' => 0,
|
||||
'msg' => '查询成功',
|
||||
'count' => count($node_list),
|
||||
'data' => $node_list,
|
||||
];
|
||||
}
|
||||
}
|
||||
193
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/User.php
Normal file
193
芳林公司项目/www.zhiyuanhelp.com/application/admin/model/User.php
Normal file
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
/**
|
||||
* 系统管理员模型
|
||||
* Class User
|
||||
* @package app\admin\model
|
||||
*/
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
|
||||
class User extends ModelService {
|
||||
|
||||
/**
|
||||
* 绑定数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'system_user';
|
||||
|
||||
/**
|
||||
* 关联角色表数据
|
||||
* @return \think\model\relation\HasOne
|
||||
*/
|
||||
public function auth() {
|
||||
return $this->hasOne("Auth", "id", "auth_id")->joinType('left')->field('title');
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用或者禁用管理员账户
|
||||
* @param $id
|
||||
* @return User|bool
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function operate($id) {
|
||||
$where_operate = [
|
||||
['id', '=', $id],
|
||||
['is_deleted', '=', 0],
|
||||
['status', 'In', [0, 1]],
|
||||
];
|
||||
$operate = $this->where($where_operate)->find();
|
||||
if (!empty($operate)) {
|
||||
$operate['status'] == 0 ? $status = 1 : $status = 0;
|
||||
$status == 0 ? $msg = '账户停用成功!' : $msg = '账户启用成功';
|
||||
$update = $this->where($where_operate)->update(['status' => $status]);
|
||||
if ($update >= 1) return ['code' => 0, 'msg' => $msg];
|
||||
return ['code' => 1, 'msg' => '账户状态更改失败,请检查!'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
* @param $username 管理员账户
|
||||
* @param $password 管理员密码
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function login($username, $password) {
|
||||
$where_login = [
|
||||
['username', '=', $username],
|
||||
['is_deleted', 'In', [0, 1]],
|
||||
['status', 'In', [0, 1]],
|
||||
];
|
||||
$login = $this->where($where_login)->find();
|
||||
if (empty($login)) return ['code' => 1, 'msg' => '账户不存在,请重新输入!', 'user' => $login];
|
||||
if ($login['password'] != password($password)) return ['code' => 1, 'msg' => '密码不正确,请重新输入!', 'user' => $login];
|
||||
if ($login['is_deleted'] == 1) return ['code' => 1, 'msg' => '该账户已被删除,请联系超级管理员!', 'user' => $login];
|
||||
if ($login['status'] == 0) return ['code' => 1, 'msg' => '该账户已被停用,请联系超级管理员!', 'user' => $login];
|
||||
unset($login['password']);
|
||||
return ['code' => 0, 'msg' => '登录成功,正在进入后台系统!', 'user' => $login];
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加管理员
|
||||
* @param $insert 需要插入的数据
|
||||
* @return \think\response\Json
|
||||
* @throws \think\exception\PDOException
|
||||
*/
|
||||
public function add($insert) {
|
||||
//使用事物保存数据
|
||||
$this->startTrans();
|
||||
$save = $this->save($insert);
|
||||
if (!$save) {
|
||||
$this->rollback();
|
||||
return __error('数据有误,请稍后再试!');
|
||||
}
|
||||
$this->commit();
|
||||
return __success('管理员账户添加成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改管理员信息
|
||||
* @param $update 需要修改的数据
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function edit($update) {
|
||||
$update = $this->where('id', $update['id'])->update($update);
|
||||
if ($update >= 1) return __success('信息修改成功');
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改管理员自己的信息
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function editSelf($data) {
|
||||
$this->where('id', $data['id'])->update($data);
|
||||
|
||||
//重新刷新session
|
||||
$user = $this->where('id', $data['id'])->find();
|
||||
unset($user['password']);
|
||||
$user['login_at'] = time();
|
||||
session('user', $user);
|
||||
|
||||
return __success('信息修改成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改管理员密码
|
||||
* @param $update 需要修改的数据
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function editPassword($update) {
|
||||
$this->startTrans();
|
||||
try {
|
||||
$this->where('id', $update['id'])->update(['password' => password($update['password'])]);
|
||||
$this->commit();
|
||||
} catch (\Exception $e) {
|
||||
$this->rollback();
|
||||
return __error($e->getMessage());
|
||||
}
|
||||
return __success('密码修改成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户列表信息
|
||||
* @param int $page 当前页
|
||||
* @param int $limit 每页显示数量
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function userList($page = 1, $limit = 10, $search = []) {
|
||||
$where = [['is_deleted', '=', 0]];
|
||||
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if ($key == 'status' && $value != '') {
|
||||
$where[] = [$key, '=', $value];
|
||||
} elseif ($key == 'create_at' && $value != '') {
|
||||
$value_list = explode(" - ", $value);
|
||||
$where[] = [$key, 'BETWEEN', ["{$value_list[0]} 00:00:00", "{$value_list[1]} 23:59:59"]];
|
||||
} else {
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
|
||||
$field = 'id, auth_id, username, head_img, qq, mail, phone, remark, status, create_by, create_at';
|
||||
$count = $this->where($where)->count();
|
||||
$data = $this->where($where)->field($field)->page($page, $limit)->select()
|
||||
->each(function ($item, $key) {
|
||||
list($auth_id_list, $auth_title) = [json_decode($item['auth_id'], true), ''];
|
||||
foreach ($auth_id_list as $auth_id) {
|
||||
$title = model('auth')->where(['id' => $auth_id, 'status' => 1])->value('title');
|
||||
$auth_title = empty($auth_title) ? $title : "{$auth_title},{$title}";
|
||||
}
|
||||
$create_by_username = $this->where(['id' => $item['create_by'], 'status' => 1, 'is_deleted' => 0])->value('username');
|
||||
empty($auth_title) ? $item['auth_title'] = '暂无权限信息' : $item['auth_title'] = $auth_title;
|
||||
empty($create_by_username) ? $item['create_by_username'] = '暂未创建者信息' : $item['create_by_username'] = $create_by_username;
|
||||
});
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
a1519cd4-363d-4c2a-87f6-0e9a0023bd99
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/24
|
||||
* Time: 15:06
|
||||
*/
|
||||
|
||||
namespace app\admin\model\costom;
|
||||
|
||||
|
||||
use think\Model;
|
||||
|
||||
class Message extends Model
|
||||
{
|
||||
protected $table = 'user_message';
|
||||
|
||||
/**
|
||||
* 获取留言建议列表信息
|
||||
* @param int $page 当前页
|
||||
* @param int $limit 每页显示数量
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function messageList($page = 1, $limit = 10, $search = []){
|
||||
$where = [];
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if (!empty($value)) {
|
||||
switch ($key) {
|
||||
case 'add_time':
|
||||
$value_list = explode(" - ", $value);
|
||||
$value_list[0] = strtotime($value_list[0]);
|
||||
$value_list[1] = strtotime($value_list[1]);
|
||||
$where[] = [$key, 'BETWEEN', ["$value_list[0]", "$value_list[1]"]];
|
||||
break;
|
||||
case 'status':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'telnum':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'type':
|
||||
$where[] = [$key, '=', $value-1];
|
||||
break;
|
||||
default:
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$count = self::where($where)->count();
|
||||
$data = self::where($where)->page($page, $limit)->order([ 'add_time' => 'desc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
|
||||
foreach ($data as $key => $val){
|
||||
$val['add_time'] = date('Y-m-d H:i:s',$val['add_time']);
|
||||
|
||||
if($val['reply_time']){
|
||||
$val['reply_time'] = date('Y-m-d H:i:s',$val['reply_time']);
|
||||
}
|
||||
$val['img1'] = config('secure.mpic_url'). $val['img1'];
|
||||
|
||||
$val['img2'] = config('secure.mpic_url'). $val['img2'];
|
||||
|
||||
|
||||
|
||||
if($val['type']){
|
||||
$val['type'] = config('setmes.mesName')[$val['type']];
|
||||
}else{
|
||||
$val['type'] = '考生建议';
|
||||
}
|
||||
}
|
||||
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/*
|
||||
* 回复问题
|
||||
* */
|
||||
public function reply($post){
|
||||
$post['reply'] = $post['replyCon'];
|
||||
$post['status'] = 2;
|
||||
unset($post['replyCon']);
|
||||
try {
|
||||
self::where('id', $post['id'])->update($post);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
return __error($e->getMessage());
|
||||
}
|
||||
return __success('回复成功');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/23
|
||||
* Time: 19:02
|
||||
*/
|
||||
|
||||
namespace app\admin\model\costom;
|
||||
|
||||
|
||||
use think\Exception;
|
||||
use think\facade\Log;
|
||||
use think\Model;
|
||||
|
||||
require '../extend/WxPay/WxPay.Api.php';
|
||||
class Order extends Model
|
||||
{
|
||||
protected $table = 'orders';
|
||||
|
||||
public static function orderRefund($post){
|
||||
$resOrder = self::field('ord_no,status,money')->where([['id','=',$post['id']],['status','=',1],['pay_way','=',$post['payWay']]])->find();
|
||||
//订单状态是否已支付
|
||||
if(!$resOrder){
|
||||
return 2;
|
||||
}
|
||||
if($post['payWay'] == 1){
|
||||
//退款参数赋值
|
||||
$data['order_no'] = $resOrder['ord_no'];
|
||||
$data['total_price'] = $resOrder['money'];
|
||||
$data['reason'] = $post['reason'];
|
||||
$data['op_user_id'] = config('wxpay.mch_id');
|
||||
$result = self::refund($data);
|
||||
|
||||
if($result['result_code'] == 'SUCCESS'){
|
||||
self::where([['id','=',$post['id']],['status','=',1]])->update(['status' => 2,'refund_time'=>time()]);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}else{
|
||||
$data['order_no'] = $resOrder['ord_no'];
|
||||
$data['total_price'] = $resOrder['money'];
|
||||
$data['reason'] = $post['reason'];
|
||||
$result = self::aliRefund($data);
|
||||
if($result->code == 10000 && $result->msg == 'Success'){
|
||||
self::where([['id','=',$post['id']],['status','=',1],['pay_way','=',$post['payWay']]])->update(['status' => 2,'refund_time'=>time()]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 微信支付退款
|
||||
* @param $orderInfo
|
||||
* @throws \WxPayException
|
||||
*/
|
||||
private static function refund($orderInfo)
|
||||
{
|
||||
$inputObj = new \WxPayUnifiedOrder();
|
||||
$out_refund_no = date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
|
||||
$inputObj->SetOut_trade_no($orderInfo['order_no']);
|
||||
$inputObj->SetOut_refund_no($out_refund_no);
|
||||
$inputObj->SetTotal_fee(intval($orderInfo['total_price']*100));
|
||||
$inputObj->SetRefund_fee(intval($orderInfo['total_price']*100));
|
||||
$inputObj->SetRefund_desc($orderInfo['reason']);
|
||||
$inputObj->SetOp_user_id( $orderInfo['op_user_id']);
|
||||
$wxOrder = \WxPayApi::refund($inputObj);
|
||||
return $wxOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付寶退款
|
||||
* @param $orderInfo
|
||||
*/
|
||||
private static function aliRefund($orderInfo)
|
||||
{
|
||||
require '../extend/alipay/wappay/buildermodel/AlipayTradeRefundContentBuilder.php';// 加载交易服务
|
||||
require '../extend/alipay/wappay/service/AlipayTradeService.php';// 加载交易服务
|
||||
|
||||
$out_trade_no = trim($orderInfo['order_no']);
|
||||
|
||||
//退款金额,不能大于订单总金额
|
||||
$refund_amount=trim($orderInfo['total_price']);
|
||||
|
||||
//退款的原因说明
|
||||
$refund_reason=trim($orderInfo['reason']);
|
||||
|
||||
$config = config('alipay.');
|
||||
|
||||
$RequestBuilder = new \AlipayTradeRefundContentBuilder();
|
||||
$RequestBuilder->setOutTradeNo($out_trade_no);
|
||||
$RequestBuilder->setRefundAmount($refund_amount);
|
||||
$RequestBuilder->setRefundReason($refund_reason);
|
||||
|
||||
|
||||
$Response = new \AlipayTradeService($config);
|
||||
$result=$Response->Refund($RequestBuilder);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取订单列表信息
|
||||
* @param int $page 当前页
|
||||
* @param int $limit 每页显示数量
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function orderList($page = 1, $limit = 10, $search = []) {
|
||||
$where = [];
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if (!empty($value)) {
|
||||
switch ($key) {
|
||||
case 'add_time':
|
||||
$value_list = explode(" - ", $value);
|
||||
$value_list[0] = strtotime($value_list[0]);
|
||||
$value_list[1] = strtotime($value_list[1]);
|
||||
$where[] = [$key, 'BETWEEN', ["$value_list[0]", "$value_list[1]"]];
|
||||
break;
|
||||
case 'stu_yzy_province':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'telnum':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'ord_no':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'pay_way':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'status':
|
||||
if($value > 0){
|
||||
$where[] = [$key, '=', $value-1];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$count = self::where($where)->count();
|
||||
$data = self::field('id,score,add_time,pay_time,vip,wenli,mykemustr,wenli,province_title,telnum,money,ord_no,refund_time,status,user_id,pay_way')->where($where)->page($page, $limit)->order([ 'add_time' => 'desc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
//获取配置权限名称
|
||||
$vipNameArr = config('product.vipName');
|
||||
|
||||
foreach ($data as $key => $val){
|
||||
$data[$key]['order_time'] = '';
|
||||
$data[$key]['vipName'] = $vipNameArr[$val['vip']];
|
||||
$data[$key]['order_time'] .= "下单:".date('Y-m-d H:i:s',$val['add_time']);
|
||||
if($val['pay_time']){
|
||||
$data[$key]['order_time'] .="_支付:". date('Y-m-d H:i:s',$val['pay_time']);
|
||||
}
|
||||
if($val['refund_time']){
|
||||
$data[$key]['order_time'] .="_退款:". date('Y-m-d H:i:s',$val['refund_time']);
|
||||
}
|
||||
$val['wenli'] = $val['wenli'] = config('setSub.subTypeName')[$val['wenli']];
|
||||
//拼接用户信息
|
||||
$data[$key]['userInfo'] = $val['province_title']."_".$val['score']."_".$val['wenli']."_".$val['mykemustr'];
|
||||
}
|
||||
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/25
|
||||
* Time: 15:11
|
||||
*/
|
||||
|
||||
namespace app\admin\model\costom;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class Proscore extends ModelService
|
||||
{
|
||||
/**
|
||||
* 绑定数据表
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'yzy_province_lines2020';
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取省控分数列表
|
||||
* @param int $page
|
||||
* @param int $limit
|
||||
* @param array $search
|
||||
* @return array
|
||||
*/
|
||||
public static function getList($page = 1, $limit = 10, $search = []) {
|
||||
$where = [];
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if (!empty($value)) {
|
||||
switch ($key) {
|
||||
case 'province_id':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
default:
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$count = self::where($where)->count();
|
||||
$data = self::where($where)->page($page, $limit)->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/23
|
||||
* Time: 8:57
|
||||
*/
|
||||
|
||||
namespace app\admin\model\costom;
|
||||
|
||||
|
||||
use app\admin\service\ModelService;
|
||||
|
||||
class User extends ModelService
|
||||
{
|
||||
protected $table = 'users';
|
||||
|
||||
/**
|
||||
* 获取用户列表信息
|
||||
* @param int $page 当前页
|
||||
* @param int $limit 每页显示数量
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function userList($page = 1, $limit = 10, $search = []) {
|
||||
$where = [];
|
||||
//搜索条件
|
||||
foreach ($search as $key => $value) {
|
||||
if (!empty($value)) {
|
||||
switch ($key) {
|
||||
case 'add_time':
|
||||
$value_list = explode(" - ", $value);
|
||||
$value_list[0] = strtotime($value_list[0]);
|
||||
$value_list[1] = strtotime($value_list[1]);
|
||||
$where[] = [$key, 'BETWEEN', ["$value_list[0]", "$value_list[1]"]];
|
||||
break;
|
||||
case 'phone':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
case 'province':
|
||||
$where[] = [$key, '=', $value];
|
||||
break;
|
||||
default:
|
||||
!empty($value) && $where[] = [$key, 'LIKE', '%' . $value . '%'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$count = self::where($where)->count();
|
||||
$data = self::field('id,score,add_time,province,phone,wenli,mykemu')->where($where)->page($page, $limit)->order([ 'add_time' => 'desc'])->select();
|
||||
empty($data) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||||
//获取省份数组
|
||||
$provinceArr = config('province.province');
|
||||
foreach ($data as $key => $val){
|
||||
$val['province'] = $provinceArr[$val['province']]['title'];
|
||||
$val['add_time'] = date('Y-m-d H:i:s',$val['add_time']);
|
||||
$val['wenli'] = config('setSub.subTypeName')[$val['wenli']];
|
||||
if($val['mykemu']){
|
||||
$val['mykemu'] = changeSubString($val['mykemu']);
|
||||
}
|
||||
|
||||
$data[$key]['userInfo'] = $val['province']."_".$val['score']."_".$val['wenli']."_".$val['mykemu'];
|
||||
}
|
||||
|
||||
|
||||
$info = [
|
||||
'limit' => $limit,
|
||||
'page_current' => $page,
|
||||
'page_sum' => ceil($count / $limit),
|
||||
];
|
||||
$list = [
|
||||
'code' => 0,
|
||||
'msg' => $msg,
|
||||
'count' => $count,
|
||||
'info' => $info,
|
||||
'data' => $data,
|
||||
];
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
1869b3c6-ad2e-4621-aeea-d2243390b75f
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* 访问权限控制
|
||||
* Class AuthService
|
||||
* @package app\admin\service
|
||||
*/
|
||||
namespace app\admin\service;
|
||||
|
||||
|
||||
|
||||
class AuthService {
|
||||
|
||||
/**
|
||||
* 判断是否有权限访问该节点
|
||||
* @param $node 节点
|
||||
* @return bool (true:有权限,false:无权限)
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function checkNode($node = '') {
|
||||
//如果没有传参,默认获取当前位置 模块/控制器/方法 (小写)
|
||||
if (empty($node)) $node = self::getNode();
|
||||
|
||||
//判断当前登录是否为超级管理员
|
||||
if (session('user.id') == 1) return true;
|
||||
|
||||
//判断是否加入RABC控制
|
||||
$is_auth = model('SysNode')->where(['node' => $node, 'is_auth' => 1])->find();
|
||||
if (empty($is_auth)) return true;
|
||||
|
||||
//获取当前用户角色组信息 ,拆表
|
||||
$user = new \app\admin\model\User;
|
||||
$auth_id_list = json_decode($user->where(['id' => session('user.id'), 'status' => 1, 'is_deleted' => 0])->value('auth_id'), true);
|
||||
//去除失效的角色组信息
|
||||
foreach ($auth_id_list as $k => $val) {
|
||||
if (empty(model('SysAuth')->where(['id' => $val, 'status' => 1])->find())) unset($auth_id_list[$k]);
|
||||
}
|
||||
|
||||
//判断是否有权限访问
|
||||
foreach ($auth_id_list as $vo) {
|
||||
if ($vo == 0) return true; //超级管理员组权限
|
||||
$is_auth_node = model('SysAuthNode')->where(['auth' => $vo, 'node' => $is_auth['id']])->find();
|
||||
if (!empty($is_auth_node)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前节点
|
||||
* @return string 节点信息
|
||||
*/
|
||||
public static function getNode() {
|
||||
$node = app('request')->module() . '/' . app('request')->controller() . '/' . app('request')->action();
|
||||
return self::parseNodeStr($node);
|
||||
}
|
||||
|
||||
/**
|
||||
* 驼峰转下划线规则
|
||||
* @param string $node
|
||||
* @return string
|
||||
*/
|
||||
public static function parseNodeStr($node) {
|
||||
$tmp = [];
|
||||
foreach (explode('/', $node) as $name) {
|
||||
$tmp[] = strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
|
||||
}
|
||||
return str_replace('._', '.', trim(join('/', $tmp), '/'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* 验证码服务类
|
||||
* Class CodeService
|
||||
* @package app\admin\service
|
||||
*/
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
|
||||
class CodeService {
|
||||
|
||||
|
||||
public static function validate() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* 日志服务
|
||||
* Class LogService
|
||||
* @package app\admin\service
|
||||
*/
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
use think\Db;
|
||||
|
||||
class LogService {
|
||||
|
||||
/**
|
||||
* 登录日志
|
||||
* @param $user_id 系统用户编号
|
||||
* @param $type 登录类型 (0:退出,1:登录)
|
||||
* @param bool $status 状态(0:失败,1:成功)
|
||||
* @param string $remark
|
||||
*/
|
||||
public static function loginLog($user_id, $type = 1, $status = 1, $remark = '') {
|
||||
$location_info = get_location();
|
||||
$insert = [
|
||||
'type' => $type,
|
||||
'user_id' => $user_id,
|
||||
'ip' => get_ip(),
|
||||
'country' => $location_info['country'],
|
||||
'region' => $location_info['region'],
|
||||
'city' => $location_info['city'],
|
||||
'isp' => $location_info['isp'],
|
||||
'location' => $location_info['country'] . $location_info['region'] . $location_info['city'] . $location_info['isp'],
|
||||
'remark' => $remark,
|
||||
'status' => $status,
|
||||
];
|
||||
Db::name('SystemLoginRecord')->insert($insert);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/*
|
||||
* 邮件服务类
|
||||
* */
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
use app\admin\model\User;
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\Exception;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* 邮箱服务类
|
||||
* Class MailService
|
||||
* @package app\admin\service
|
||||
*/
|
||||
class MailService {
|
||||
|
||||
/**
|
||||
* @var 邮箱服务类对象
|
||||
*/
|
||||
public static $mail;
|
||||
|
||||
/**
|
||||
* 初始化服务类
|
||||
* MailService constructor.
|
||||
*/
|
||||
public static function __init() {
|
||||
$mailInfo = Db::name('SystemConfig')->where('group', 'mail')->column('name,value');//获取邮箱配置信息
|
||||
self::$mail = new PHPMailer();
|
||||
self::$mail->isSMTP();// 使用SMTP服务
|
||||
self::$mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
|
||||
self::$mail->Host = $mailInfo['MailHost'];// 发送方的SMTP服务器地址
|
||||
self::$mail->SMTPAuth = true;// 是否使用身份验证
|
||||
self::$mail->Username = $mailInfo['MailUsername'];// 发送方的QQ邮箱用户名,就是自己的邮箱名
|
||||
self::$mail->Password = $mailInfo['MailPassword'];// 发送方的邮箱密码,不是登录密码,是qq的第三方授权登录码,要自己去开启,在邮箱的设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 里面
|
||||
self::$mail->setFrom($mailInfo['MailUsername'], $mailInfo['MailNickname']);// 设置发件人信息,如邮件格式说明中的发件人,
|
||||
self::$mail->addReplyTo($mailInfo['MailReplyTo'], $mailInfo['MailNickname']);// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
|
||||
self::$mail->SMTPSecure = "ssl";// 使用ssl协议方式,
|
||||
self::$mail->Port = 465;// QQ邮箱的ssl协议方式端口号是465/587
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮箱信息
|
||||
* @param $toemail 邮箱 (可以为单个:1111@qq.com 可以为数组:[1111@qq.com, 2222@qq.com])
|
||||
* @param $title 标题
|
||||
* @param $info 内容
|
||||
* @return array
|
||||
*/
|
||||
public static function send($toemail, $title, $info) {
|
||||
self::__init();
|
||||
self::$mail->Subject = $title;
|
||||
self::$mail->Body = $info;
|
||||
// self::$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
|
||||
// self::$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
|
||||
// self::$mail->addAttachment("bug0.jpg");// 添加附件
|
||||
// self::$mail->AltBody = "纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
|
||||
|
||||
//判断是否为群发信息
|
||||
if (is_array($toemail)) {
|
||||
foreach ($toemail as $vo) {
|
||||
self::$mail->addAddress($vo, 'send');
|
||||
!self::$mail->send() ? $msg[] = ['mail' => $vo, 'msg' => self::$mail->ErrorInfo] : $msg[] = ['mail' => $vo, 'msg' => '邮箱发送成功!'];
|
||||
}
|
||||
return ['code' => 1, 'msg' => $msg];
|
||||
} else {
|
||||
self::$mail->addAddress($toemail, 'send');
|
||||
if (!self::$mail->send()) {
|
||||
return ['code' => 1, 'msg' => self::$mail->ErrorInfo];
|
||||
} else {
|
||||
return ['code' => 0, 'msg' => '邮箱发送成功!'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* 模型基础数据服务
|
||||
* Class ModelService
|
||||
* @package service
|
||||
*/
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
|
||||
use think\Model;
|
||||
|
||||
|
||||
class ModelService extends Model {
|
||||
|
||||
/**
|
||||
* 主键定义
|
||||
* @var string
|
||||
*/
|
||||
protected $pk = 'id';
|
||||
|
||||
|
||||
/**
|
||||
* 格式化分页
|
||||
* @param array $query 分页参数 ['word' => $word]
|
||||
*/
|
||||
public function formatQuery($query = []) {
|
||||
$format_query = [
|
||||
'query' => [],
|
||||
];
|
||||
foreach ($query as $k => $val) {
|
||||
$format_query['query'] = [$k, $val];
|
||||
}
|
||||
return $format_query;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改字段值
|
||||
* @param $update
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public static function editField($update) {
|
||||
$data = self::where('id', $update['id'])->update([$update['field'] => $update['value']]);
|
||||
if ($data == 1) {
|
||||
return __success('修改成功!');
|
||||
} else {
|
||||
return __error('数据没有修改!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增
|
||||
* @param $post
|
||||
* @return \think\response\Json
|
||||
* @throws \think\exception\PDOException
|
||||
*/
|
||||
public static function addData($post) {
|
||||
try {
|
||||
self::insert($post);
|
||||
} catch (\Exception $e) {
|
||||
return __error($e->getMessage());
|
||||
}
|
||||
return __success('添加成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* @param $post
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public static function editData($post) {
|
||||
try {
|
||||
self::where('id', $post['id'])->update($post);
|
||||
} catch (\Exception $e) {
|
||||
return __error($e->getMessage());
|
||||
}
|
||||
return __success('修改成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 软删除操作
|
||||
* @param $id 列ID
|
||||
* @param bool $type 删除类型 (false:软删除,true:真实删除)
|
||||
* @return bool|ModelService
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function delData($id, $type = false) {
|
||||
is_array($id) ? $model = self::whereIn('id', $id) : $model = self::where('id', $id);
|
||||
|
||||
$del = $model->delete();
|
||||
|
||||
if ($del >= 1) return __success('删除成功');
|
||||
return __error('删除失败,请检查!');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
/**
|
||||
* 系统节点服务类
|
||||
* Class NodeService
|
||||
* @package app\admin\service
|
||||
*/
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
use app\common\model\SysNode;
|
||||
use think\Env;
|
||||
use think\Db;
|
||||
|
||||
|
||||
class NodeService {
|
||||
|
||||
/**
|
||||
* 获取指定模块的所有节点,默认获取所有模块的所有节点(树形形状)
|
||||
* @param array $module $module['admin','index'] 不传默认为所有模块
|
||||
* @return array
|
||||
*/
|
||||
public static function getNodeTree($module = []) {
|
||||
empty($module) && $module = self::getFolders();
|
||||
$node_list = [];
|
||||
foreach ($module as &$vo_m) {
|
||||
$controller = self::getControllers('../application/' . $vo_m . '/controller');
|
||||
foreach ($controller as &$vo_c) {
|
||||
if ($vo_c != 'Login') {
|
||||
$action = self::getActions('app\\' . $vo_m . '\\controller\\' . $vo_c);
|
||||
foreach ($action as &$vo_a) $vo_a = AuthService::parseNodeStr($vo_m . '/' . $vo_c . '/' . $vo_a);
|
||||
!empty($action) && $node_list[AuthService::parseNodeStr($vo_m)][AuthService::parseNodeStr($vo_m . '/' . $vo_c)] = $action;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $node_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定目录下的所有文件夹名称
|
||||
* @param $dir
|
||||
* @return array
|
||||
*/
|
||||
public static function getFolders($dir) {
|
||||
$pathList = glob($dir . '/*');
|
||||
$folder_list = [];
|
||||
foreach ($pathList as $vo) {
|
||||
if (is_dir($vo)) {
|
||||
$folder_list[] = str_replace($dir . '/', '', $vo);
|
||||
}
|
||||
}
|
||||
return $folder_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定模块中的控制器
|
||||
* @param $dir
|
||||
* @return array|mixed
|
||||
*/
|
||||
public static function getControllers($dir) {
|
||||
list($folders, $pathList, $controllerList) = [self::getFolders($dir), glob($dir . '/*.php'), []];
|
||||
foreach ($folders as $folder) {
|
||||
$pathFolders = glob("{$dir}/{$folder}/*.php");
|
||||
foreach ($pathFolders as $pathFolder) {
|
||||
$pathList[] = $pathFolder;
|
||||
}
|
||||
}
|
||||
foreach ($pathList as $vo) {
|
||||
$className = explode("/controller/", $vo);
|
||||
$className = str_replace('.php', '', end($className));
|
||||
$className = str_replace('/', '.', $className);
|
||||
$controllerList[] = $className;
|
||||
}
|
||||
return $controllerList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取控制器中的方法
|
||||
* @param $className
|
||||
* @return array|mixed
|
||||
*/
|
||||
public static function getActions($className) {
|
||||
list($actions, $actionList) = [get_class_methods($className), []];
|
||||
if (!empty($actions)) {
|
||||
foreach ($actions as $action) {
|
||||
if (strpos($action, '_') !== 0 && $action !== 'initialize') {
|
||||
$actionList[] = $action;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $actionList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统节点
|
||||
* @param array $modules 模块名
|
||||
* @return array|mixed 节点列表
|
||||
*/
|
||||
public static function getNodeList($modules = []) {
|
||||
list($nodeList, $appPath, $appNamespace) = [[], '../application', env('app_namespace')];
|
||||
empty($modules) && $modules = self::getFolders($appPath);
|
||||
foreach ($modules as $module) {
|
||||
$nodeList[] = AuthService::parseNodeStr($module);
|
||||
$modulePath = "{$appPath}/{$module}/controller";
|
||||
$controllers = self::getControllers($modulePath);
|
||||
foreach ($controllers as $controller) {
|
||||
$nodeList[] = AuthService::parseNodeStr("{$module}/{$controller}");
|
||||
$controller_replace = str_replace('.', '\\', $controller);
|
||||
$controllerPath = "{$appNamespace}\\{$module}\\controller\\{$controller_replace}";
|
||||
$actions = self::getActions($controllerPath);
|
||||
foreach ($actions as $action) {
|
||||
$nodeList[] = AuthService::parseNodeStr("{$module}/{$controller}/{$action}");
|
||||
}
|
||||
}
|
||||
}
|
||||
return $nodeList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新系统节点
|
||||
* @param array $modules
|
||||
*/
|
||||
public static function refreshNode($modules = []) {
|
||||
empty($modules) && $modules = self::getFolders(env('app_path'));
|
||||
list($nodeList, $insertNode) = [self::getNodeList($modules), []];
|
||||
foreach ($nodeList as $vo) {
|
||||
$nodeInfo = Db::name('SystemNode')->where(['node' => $vo])->find();
|
||||
if (empty($nodeInfo)) {
|
||||
list($nodeCount, $nodeType) = [substr_count($vo, '/'), 0];
|
||||
switch ($nodeCount) {
|
||||
case 0:
|
||||
$nodeType = 1;
|
||||
break;
|
||||
case 1:
|
||||
$nodeType = 2;
|
||||
break;
|
||||
case 2:
|
||||
$nodeType = 3;
|
||||
break;
|
||||
}
|
||||
$insertNode[] = ['type' => $nodeType, 'node' => $vo];
|
||||
}
|
||||
}
|
||||
if (!empty($insertNode)) {
|
||||
Db::startTrans();
|
||||
try {
|
||||
Db::name('SystemNode')->insertAll($insertNode);
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
Db::rollback();
|
||||
return ['code' => 1, 'msg' => $e->getMessage()];
|
||||
}
|
||||
return ['code' => 0, 'msg' => '节点刷新成功!'];
|
||||
} else {
|
||||
return ['code' => 1, 'msg' => '节点数据暂无变化!'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除失效节点
|
||||
* @param array $modules
|
||||
*/
|
||||
public static function cleanNode($modules = []) {
|
||||
empty($modules) && $modules = self::getFolders(env('app_path'));
|
||||
$nodeList = Db::name('SystemNode')->where(['is_auto' => 0])->select();
|
||||
$autoNodeList = self::getNodeList($modules);
|
||||
foreach ($nodeList as $voNode) {
|
||||
$is_exist = false;
|
||||
foreach ($autoNodeList as $voAutoNode) {
|
||||
$voNode['node'] == $voAutoNode && $is_exist = true;
|
||||
}
|
||||
$is_exist == false && $delete[] = $voNode['id'];
|
||||
}
|
||||
if (!empty($delete)) {
|
||||
Db::startTrans();
|
||||
try {
|
||||
Db::name('SystemNode')->delete($delete);
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
Db::rollback();
|
||||
return ['code' => 1, 'msg' => $e->getMessage()];
|
||||
}
|
||||
return ['code' => 0, 'msg' => '清除失效节点成功!'];
|
||||
} else {
|
||||
return ['code' => 1, 'msg' => '无失效节点!'];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* 七牛云cdn服务类
|
||||
* */
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
use think\Db;
|
||||
use think\facade\Config;
|
||||
use Qiniu\Auth;
|
||||
use Qiniu\Storage\UploadManager;
|
||||
|
||||
class QiniuService {
|
||||
|
||||
/**
|
||||
* 上传至七牛云
|
||||
* @param string $filePath 要上传文件的本地路径
|
||||
* @param string $key 上传到七牛后保存的文件名
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function upload($filePath = '') {
|
||||
// 需要填写你的 Access Key 和 Secret Key
|
||||
$accessKey = Config::get('qiniu.AccessKey');
|
||||
$secretKey = Config::get('qiniu.SecretKey');
|
||||
$bucket = Config::get('qiniu.Bucket');
|
||||
// 构建鉴权对象
|
||||
$auth = new Auth($accessKey, $secretKey);
|
||||
// 生成上传 Token
|
||||
$token = $auth->uploadToken($bucket);
|
||||
// 初始化 UploadManager 对象并进行文件的上传。
|
||||
$uploadMgr = new UploadManager();
|
||||
// 要上传文件的本地路径
|
||||
$filePath = ".{$filePath}";
|
||||
// 上传到七牛后保存的文件名
|
||||
$key = md5($filePath) . ToolService::getSuffix($filePath);
|
||||
// 初始化 UploadManager 对象并进行文件的上传。
|
||||
$uploadMgr = new UploadManager();
|
||||
// 调用 UploadManager 的 putFile 方法进行文件的上传。
|
||||
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
|
||||
if ($err !== null) {
|
||||
return $err;
|
||||
} else {
|
||||
$url = Config::get('qiniu.url') . '/' . $ret['key'];
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
||||
public static function base64($base64, $key) {
|
||||
$accessKey = Config::get('qiniu.AccessKey');
|
||||
$secretKey = Config::get('qiniu.SecretKey');
|
||||
$bucket = Config::get('qiniu.Bucket');
|
||||
$auth = new Auth($accessKey, $secretKey);
|
||||
$token = $auth->uploadToken($bucket);
|
||||
$uploadMgr = new UploadManager();
|
||||
// 上传字符串到七牛
|
||||
list($ret, $err) = $uploadMgr->put($token, $key, $base64);
|
||||
if ($err !== null) {
|
||||
return $err;
|
||||
} else {
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取七牛云上传token
|
||||
* @return string
|
||||
*/
|
||||
public static function getToken() {
|
||||
// 需要填写你的 Access Key 和 Secret Key
|
||||
$accessKey = Config::get('qiniu.AccessKey');
|
||||
$secretKey = Config::get('qiniu.SecretKey');
|
||||
$bucket = Config::get('qiniu.Bucket');
|
||||
// 构建鉴权对象
|
||||
$auth = new Auth($accessKey, $secretKey);
|
||||
// 生成上传 Token
|
||||
$token = $auth->uploadToken($bucket);
|
||||
return $token;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* 工具服务类
|
||||
* */
|
||||
|
||||
namespace app\admin\service;
|
||||
|
||||
|
||||
class ToolService {
|
||||
|
||||
/**
|
||||
* 获取文件后缀名
|
||||
* @param $filename
|
||||
* @return string
|
||||
*/
|
||||
public static function getSuffix($filename) {
|
||||
return strrchr($filename, '.');
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密
|
||||
* @param $data 加密内容
|
||||
* @param $key 秘钥
|
||||
* @return string
|
||||
*/
|
||||
public static function encrypt($data, $key) {
|
||||
$key = md5($key);
|
||||
$x = 0;
|
||||
$len = strlen($data);
|
||||
$l = strlen($key);
|
||||
list($char, $str) = ['', ''];
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
if ($x == $l) {
|
||||
$x = 0;
|
||||
}
|
||||
$char .= $key{$x};
|
||||
$x++;
|
||||
}
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
|
||||
}
|
||||
return base64_encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密
|
||||
* @param $data 解密内容
|
||||
* @param $key 秘钥
|
||||
* @return string
|
||||
*/
|
||||
public static function decrypt($data, $key) {
|
||||
$key = md5($key);
|
||||
$x = 0;
|
||||
$data = base64_decode($data);
|
||||
$len = strlen($data);
|
||||
$l = strlen($key);
|
||||
list($char, $str) = ['', ''];
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
if ($x == $l) {
|
||||
$x = 0;
|
||||
}
|
||||
$char .= substr($key, $x, 1);
|
||||
$x++;
|
||||
}
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
|
||||
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
|
||||
} else {
|
||||
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
|
||||
}
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
21
芳林公司项目/www.zhiyuanhelp.com/application/admin/tags.php
Normal file
21
芳林公司项目/www.zhiyuanhelp.com/application/admin/tags.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
// 应用行为扩展定义文件
|
||||
return [
|
||||
// 应用初始化
|
||||
'app_init' => [],
|
||||
// 应用开始
|
||||
'app_begin' => [],
|
||||
// 模块初始化
|
||||
'module_init' => [],
|
||||
// 操作开始执行
|
||||
'action_begin' => [],
|
||||
// 视图内容过滤
|
||||
'view_filter' => [],
|
||||
// 日志写入
|
||||
'log_write' => [],
|
||||
// 应用结束
|
||||
'app_end' => [],
|
||||
];
|
||||
@@ -0,0 +1 @@
|
||||
37fbe7a9-70d7-4042-8f14-2d23774bee5e
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/*
|
||||
* 权限验证规则
|
||||
* */
|
||||
namespace app\admin\validate;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Auth extends Validate {
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number|checkAuthId',
|
||||
'title' => 'require|max:30',
|
||||
'sort' => 'member',
|
||||
'remark' => 'require|max:250',
|
||||
'auth_id' => 'require',
|
||||
'node_id' => 'require',
|
||||
'field' => 'require',
|
||||
'value' => 'require|max:30',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'title.require' => '角色权限必须',
|
||||
'id.number' => '编号为数字',
|
||||
'field.require' => '字段必须',
|
||||
'value.require' => '修改值必须',
|
||||
'value.max' => '修改值最多不能超过30个字符',
|
||||
'title.max' => '权限角色名称最多不能超过30个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//添加系统角色
|
||||
'add' => ['title'],
|
||||
|
||||
//授权
|
||||
'authorize' => ['auth_id, node_id'],
|
||||
|
||||
//修改系统角色字段值
|
||||
'edit_field' => ['id', 'field', 'value'],
|
||||
|
||||
//删除角色
|
||||
'del' => ['id'],
|
||||
|
||||
//更改角色状态
|
||||
'status' => ['id'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 自定义验证场景
|
||||
* @return Node
|
||||
*/
|
||||
public function sceneEdit() {
|
||||
return $this->only(['id', 'remark', 'title'])
|
||||
->remove('id', 'checkAuthId');
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测ID是否存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkAuthId($value, $rule, $data = []) {
|
||||
$user = \app\admin\model\Auth::where(['id' => $value])->find();
|
||||
if (empty($user)) return '暂无角色数据,请稍后再试!';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
*公共验证规则
|
||||
*/
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 公共验证规则
|
||||
* Class Common
|
||||
* @package app\admin\validate
|
||||
*/
|
||||
class Common extends Validate {
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number',
|
||||
'field' => 'require',
|
||||
'value' => 'require|max:30',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'field.require' => '字段必须',
|
||||
'value.require' => '修改值必须',
|
||||
];
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//修改字段值
|
||||
'edit_field' => ['id', 'field', 'value'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/*
|
||||
* 系统参数验证
|
||||
* */
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 系统参数验证
|
||||
* Class Config
|
||||
* @package app\admin\validate
|
||||
*/
|
||||
class Config extends Validate {
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number|checkConfigId',
|
||||
'field' => 'require',
|
||||
'value' => 'require|max:250',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'field.require' => '字段必须',
|
||||
'value.require' => '修改值必须',
|
||||
'value.max' => '修改值最多不能超过250个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//修改字段值
|
||||
'edit_field' => ['id', 'field', 'value'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 检测ID是否存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkConfigId($value, $rule, $data = []) {
|
||||
$config = \app\admin\model\Config::where(['id' => $value])->find();
|
||||
if (empty($config)) return '暂无数据,请稍后再试!';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/*
|
||||
* 登录验证
|
||||
* */
|
||||
namespace app\admin\validate;
|
||||
|
||||
use think\Validate;
|
||||
use think\captcha\Captcha;
|
||||
|
||||
/**
|
||||
* 后台登录验证类
|
||||
* Class Login
|
||||
* @package app\admin\validate
|
||||
*/
|
||||
class Login extends Validate {
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'username' => 'require|max:15',
|
||||
'password' => 'require|max:20',
|
||||
'vercode' => 'require|captcha',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'username.require' => '登录名必须',
|
||||
'username.max' => '登录名最多不能超过15个字符',
|
||||
'password.require' => '密码必须',
|
||||
'password.max' => '密码最多不能超过20个字符',
|
||||
'vercode.require' => '验证码不能为空',
|
||||
'vercode.captcha' => '验证码不正确,请重新输入',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//开启验证码登录
|
||||
'index_on' => ['username', 'password', 'vercode'],
|
||||
|
||||
//关闭验证码登录
|
||||
'index_off' => ['username', 'password'],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/*
|
||||
* 菜单验证规则
|
||||
* */
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
/**
|
||||
* 菜单管理验证类
|
||||
* Class Menu
|
||||
* @package app\admin\validate
|
||||
*/
|
||||
class Menu extends Validate {
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number|checkId',
|
||||
'pid' => 'require|number',
|
||||
'title' => 'require|max:10',
|
||||
'href' => 'max:100',
|
||||
'icon' => 'max:20',
|
||||
'sort' => 'max:10|number',
|
||||
'status' => 'require|in:0,1',
|
||||
'remark' => 'max:250',
|
||||
'field' => 'require',
|
||||
'value' => 'require|max:30',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'pid.require' => '上级菜单必须',
|
||||
'pid.number' => '上级菜单数据有误',
|
||||
'title.require' => '菜单名称必须',
|
||||
'title.max' => '名称最多不能超过10个字符',
|
||||
'href.max' => '链接最多不能超过100个字符',
|
||||
'status.in' => '启用状态格式有误',
|
||||
'sort.number' => '排序必须为数字',
|
||||
'field.require' => '字段必须',
|
||||
'value.require' => '修改值必须',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//添加菜单
|
||||
'add' => ['pid', 'title', 'href', 'icon', 'sort', 'remark'],
|
||||
|
||||
//修改菜单
|
||||
'edit' => ['id', 'pid', 'title', 'href', 'icon', 'sort', 'remark'],
|
||||
|
||||
//删除菜单
|
||||
'del' => ['id'],
|
||||
|
||||
//更改菜单状态
|
||||
'status' => ['id'],
|
||||
|
||||
//修改字段值
|
||||
'edit_field' => ['id', 'field', 'value'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 检测菜单是否存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkId($value, $rule, $data = []) {
|
||||
$menu = \app\admin\model\menu::where(['id' => $value])->find();
|
||||
if (empty($menu)) return '暂无菜单数据,请稍后再试!';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/*
|
||||
* 系统节点验证
|
||||
* */
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Node extends Validate {
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number|checkNodeId',
|
||||
'field' => 'require',
|
||||
'value' => 'require|max:30',
|
||||
'node' => 'require|checkNode',
|
||||
'title' => 'require|max:30',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'node.require' => '系统节点必须',
|
||||
'id.number' => '编号为数字',
|
||||
'field.require' => '字段必须',
|
||||
'value.require' => '修改值必须',
|
||||
'value.max' => '修改值最多不能超过30个字符',
|
||||
'title.max' => '修改值最多不能超过30个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//添加系统节点
|
||||
'add' => ['node', 'title'],
|
||||
|
||||
//修改系统节点字段值
|
||||
'edit_field' => ['id', 'field', 'value'],
|
||||
|
||||
//删除节点
|
||||
'del' => ['id'],
|
||||
|
||||
//更改节点状态
|
||||
'status' => ['id'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 自定义验证场景
|
||||
* @return Node
|
||||
*/
|
||||
public function sceneEdit()
|
||||
{
|
||||
return $this->only(['id','node','title'])
|
||||
->remove('node', 'checkNode');
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测节点id是否存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkNodeId($value, $rule, $data = []) {
|
||||
$user = \app\admin\model\node::where(['id' => $value])->find();
|
||||
if (empty($user)) return '暂无节点数据,请稍后再试!';
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测系统节点是否存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkNode($value, $rule, $data = []) {
|
||||
$user = \app\admin\model\node::where(['node' => $value])->find();
|
||||
if (!empty($user)) return '已存在该系统节点,无需再次添加!';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
218
芳林公司项目/www.zhiyuanhelp.com/application/admin/validate/User.php
Normal file
218
芳林公司项目/www.zhiyuanhelp.com/application/admin/validate/User.php
Normal file
@@ -0,0 +1,218 @@
|
||||
<?php
|
||||
/*
|
||||
* 后台管理员验证
|
||||
* */
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
|
||||
/**
|
||||
* 后台管理员验证类
|
||||
* Class User
|
||||
* @package app\admin\validate
|
||||
*/
|
||||
class User extends Validate {
|
||||
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number|checkDelId',
|
||||
'head_img' => 'require',
|
||||
'username' => 'require|min:5|max:15|checkUsername',
|
||||
'old_password' => 'require|min:6|max:20|checkOldPassword',
|
||||
'password' => 'require|min:6|max:20|checkPassword',
|
||||
'password1' => 'require|min:6|max:20|checkPassword',
|
||||
'phone' => 'require|number|mobile|checkPhone',
|
||||
'mail' => 'email|max:20|checkMail',
|
||||
'auth_id' => 'require',
|
||||
'qq' => 'number',
|
||||
'remark' => 'max:250',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'username.require' => '名称必须',
|
||||
'head_img.require' => '头像必须',
|
||||
'username.min' => '名称不能少于5个字符',
|
||||
'username.max' => '名称最多不能超过15个字符',
|
||||
'password.require' => '密码必须',
|
||||
'password.min' => '密码不能少于6个字符',
|
||||
'password.max' => '密码最多不能超过20个字符',
|
||||
'password1.require' => '第二次密码必须',
|
||||
'password1.max' => '第二次密码最多不能超过20个字符',
|
||||
'auth_id.number' => '角色编号必须是数字',
|
||||
'mail.email' => '邮箱格式错误',
|
||||
'phone.email' => '手机号格式错误',
|
||||
'qq.number' => 'QQ必须为数字',
|
||||
'remark.max' => '备注最多不能超过250个字符',
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
//添加管理员
|
||||
'add' => ['username', 'password', 'password1', 'phone', 'mail', 'auth_id', 'qq', 'remark'],
|
||||
|
||||
//修改管理员
|
||||
'edit' => ['username', 'phone', 'mail', 'auth_id', 'qq', 'remark'],
|
||||
|
||||
//修改登录密码
|
||||
'edit_password' => ['id', 'password', 'password1'],
|
||||
|
||||
//删除管理员
|
||||
'del' => ['id'],
|
||||
|
||||
//更改管理员状态
|
||||
'status' => ['id'],
|
||||
];
|
||||
|
||||
/**
|
||||
* 修改信息验证场景
|
||||
* @return User
|
||||
*/
|
||||
public function sceneEdit() {
|
||||
return $this->only(['head_img', 'phone', 'mail', 'auth_id'])
|
||||
->remove('phone', 'checkPhone')
|
||||
->remove('mail', 'checkMail');
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改自己的信息
|
||||
* @return User
|
||||
*/
|
||||
public function sceneEditSelf() {
|
||||
return $this->only(['head_img', 'phone', 'mail', 'remark'])
|
||||
->remove('phone', 'checkPhone')
|
||||
->remove('mail', 'checkMail');
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测删除时用户ID
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkDelId($value, $rule, $data = []) {
|
||||
$user = \app\admin\model\user::where(['id' => $value])->find();
|
||||
if (empty($user)) return '暂无账户数据,请稍后再试!';
|
||||
if ($user['is_deleted'] == 1) return '该账户已被删除,无需再次删除!';
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测启用或者禁用时的用户ID
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkOperateId($value, $rule, $data = []) {
|
||||
$user = \app\admin\model\user::where(['id' => $value])->find();
|
||||
if (empty($user)) return '暂无账户数据,请稍后再试!';
|
||||
if ($user['is_deleted'] == 1) return '该账户已被删除,无需再次删除!';
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户名是否已存在
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkUsername($value, $rule, $data = []) {
|
||||
$where_user = [
|
||||
'username' => $value,
|
||||
'status' => 1,
|
||||
'is_deleted' => 0,
|
||||
];
|
||||
$user = \app\admin\model\user::where($where_user)->find();
|
||||
return empty($user) ? true : '已有相同登录账号,请更换进行注册!';
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断两个输入的密码是否一致
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkPassword($value, $rule, $data = []) {
|
||||
return $data['password'] == $data['password1'] ? true : '两次输入的密码不一致,请重新输入!';
|
||||
}
|
||||
|
||||
protected function checkOldPassword($value, $rule, $data = []) {
|
||||
$where_user = [
|
||||
'id' => $data['id'],
|
||||
'status' => 1,
|
||||
'is_deleted' => 0,
|
||||
];
|
||||
$user = \app\admin\model\user::where($where_user)->find();
|
||||
if (empty($user)) return '暂无改管理员信息,请刷新重试!';
|
||||
return $user['password'] == password($value) ? true : '旧密码不正确,请重新输入!';
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否存在相同的手机号
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkPhone($value, $rule, $data = []) {
|
||||
$where_user = [
|
||||
'phone' => $value,
|
||||
'status' => 1,
|
||||
'is_deleted' => 0,
|
||||
];
|
||||
$user = \app\admin\model\user::where($where_user)->find();
|
||||
return empty($user) ? true : '已有相同手机号码,请更换进行注册!';
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否存在相同的邮箱
|
||||
* @param $value
|
||||
* @param $rule
|
||||
* @param array $data
|
||||
* @return bool|string
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
protected function checkMail($value, $rule, $data = []) {
|
||||
$where_user = [
|
||||
'mail' => $value,
|
||||
'status' => 1,
|
||||
'is_deleted' => 0,
|
||||
];
|
||||
$user = \app\admin\model\user::where($where_user)->find();
|
||||
return empty($user) ? true : '已有相同邮箱,请更换进行注册!';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
c680dcfe-9dbd-441e-b1b2-418eecefa5dd
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/24
|
||||
* Time: 16:17
|
||||
*/
|
||||
|
||||
namespace app\admin\validate\custom;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Message extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number',
|
||||
'replyCon' => 'require'
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'id.number' => '编号为数字',
|
||||
'replyCon.require' => '请输入回复内容',
|
||||
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
|
||||
//授权
|
||||
'reply' => ['id','replyCon'],
|
||||
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/25
|
||||
* Time: 18:26
|
||||
*/
|
||||
|
||||
namespace app\admin\validate\custom;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Proscore extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number',
|
||||
'province_id' => 'require|number',
|
||||
'province_title' => 'require',
|
||||
'year' => 'require',
|
||||
'GaoKaoTotal' => 'require|number',
|
||||
'ArtsScore' => 'require|number',
|
||||
'SciencesScore' => 'require|number',
|
||||
'batch' => 'require|number',
|
||||
'batchName' => 'require',
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'province_id.number' => '省份id必须为数字',
|
||||
'GaoKaoTotal.number' => '高考总分必须为数字',
|
||||
'ArtsScore.require' => '文科分数必填',
|
||||
'ArtsScore.number' => '文科分数必须为数字',
|
||||
'batch.require' => '批次序列必须',
|
||||
'batch.number' => '批次序列必须数字',
|
||||
'SciencesScore.require' => '理科分数必须',
|
||||
'SciencesScore.number' => '理科分数必须为数字',
|
||||
|
||||
|
||||
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
|
||||
'add' => ['province_id','province_title','batch','batchName','ArtsScore','GaoKaoTotal','SciencesScore','year'],
|
||||
'edit' => ['id'],
|
||||
'del' => ['id']
|
||||
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2020/4/23
|
||||
* Time: 18:58
|
||||
*/
|
||||
|
||||
namespace app\admin\validate\custom;
|
||||
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Student extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
* @var array
|
||||
*/
|
||||
protected $rule = [
|
||||
'id' => 'require|number',
|
||||
'reason' => 'require|max:200'
|
||||
];
|
||||
|
||||
/**
|
||||
* 错误提示
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => '编号必须',
|
||||
'id.number' => '编号为数字',
|
||||
'reason.require' => '退款原因必须',
|
||||
'reason.max' => '退款原因最多不能超过200个字符'
|
||||
];
|
||||
|
||||
/**
|
||||
* 应用场景
|
||||
* @var array
|
||||
*/
|
||||
protected $scene = [
|
||||
|
||||
//授权
|
||||
'refundOrder' => ['id','reason'],
|
||||
|
||||
];
|
||||
}
|
||||
1
芳林公司项目/www.zhiyuanhelp.com/application/admin/view/.pydio
Normal file
1
芳林公司项目/www.zhiyuanhelp.com/application/admin/view/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
a07dda94-8d69-4b80-95dc-fa4b03c3bff4
|
||||
@@ -0,0 +1 @@
|
||||
64ec7537-7e26-4b75-9eed-3c7f9429a7fa
|
||||
@@ -0,0 +1,87 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<style type="text/css">
|
||||
form {
|
||||
margin: 10px auto;
|
||||
width: 500px
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
padding: 10px 0
|
||||
}
|
||||
|
||||
a {
|
||||
color: #1C86EE;
|
||||
text-align: right;
|
||||
font-size: 18px
|
||||
}
|
||||
|
||||
.xtree_contianer {
|
||||
overflow: auto;
|
||||
margin-bottom: 30px;
|
||||
padding: 10px 0 25px 5px;
|
||||
width: 500px;
|
||||
border: 1px solid #9C9C9C;
|
||||
background-color: #fff
|
||||
}
|
||||
|
||||
.div-btns {
|
||||
margin: 20px 0
|
||||
}
|
||||
|
||||
.layui-form-label {
|
||||
width: 60px !important
|
||||
}
|
||||
</style>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
<h1>{$auth.title|default=''}</h1>
|
||||
<h3>授权节点:</h3>
|
||||
<div id="xtree3" class="xtree_contianer"></div>
|
||||
<input type="hidden" id="auth_id" name="auth_id" value="{$auth.id|default=''}">
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-sm" id="submitBtn">提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-sm layui-btn-primary">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script type="text/javascript" src="__STATIC__/plugs/layui-xtree2.0/layui-xtree.js"></script>
|
||||
<script type="text/javascript">
|
||||
layui.use(['form', 'layer'], function () {
|
||||
var form = layui.form
|
||||
layer = parent.layer === undefined ? layui.layer : top.layer,
|
||||
$ = layui.jquery;
|
||||
|
||||
var xtree3 = new layuiXtree({
|
||||
elem: 'xtree3'
|
||||
, form: form
|
||||
, data: "{:url('admin/api.node/getNodeTree')}?id={$auth.id}"
|
||||
, isopen: true //加载完毕后的展开状态,默认值:true
|
||||
});
|
||||
|
||||
$("#submitBtn").click(function () {
|
||||
var node_id = [];
|
||||
var oCks = xtree3.GetChecked();
|
||||
for (var i = 0; i < oCks.length; i++) {
|
||||
node_id.push(oCks[i].value);
|
||||
}
|
||||
$.request.post("{:url('@admin/auth/authorize')}", {
|
||||
auth_id: $("#auth_id").val(),
|
||||
node_id: node_id,
|
||||
}, function (res) {
|
||||
$.msg.success(res.msg, function () {
|
||||
$.tool.reload('open');
|
||||
});
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,55 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
{block name="style"}{/block}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{block name="cotent"}
|
||||
<form class="layui-form form-width-99admin">
|
||||
<br>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">权限角色</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="title" class="layui-input" lay-verify="required" value="{$auth.title|default=''}" placeholder="请输入系统角色">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">备注信息</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea id="remark" placeholder="请输入备注信息" class="layui-textarea">{$auth.remark|default=''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if !empty($auth)}
|
||||
<input type="hidden" id="id" value="{$auth.id|default=''}">
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-sm" id="submitBtn">提交</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-primary" data-close="closeOpen">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 添加、编辑
|
||||
*/
|
||||
$("#submitBtn").on("click", function () {
|
||||
var url = "{if empty($auth)}{:url('@admin/auth/add')}{else/}{:url('@admin/auth/edit')}{/if}";
|
||||
var data = {
|
||||
id: $("#id").val(),
|
||||
title: $("#title").val(),
|
||||
remark: $("#remark").val(),
|
||||
};
|
||||
$.request.post(url, data, function (res) {
|
||||
$.msg.success(res.msg, function () {
|
||||
$.tool.reload('open');
|
||||
})
|
||||
})
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,121 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--顶部操作栏--开始-->
|
||||
<blockquote id="searchBlock" class="layui-elem-quote quoteBox">
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">角色名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="title" class="layui-input" placeholder="请输入权限角色名称"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">角色状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="status" class="status" lay-filter="status">
|
||||
<option value="">请选择角色状态</option>
|
||||
{foreach $status as $vo}
|
||||
<option value="{$vo.id|default=''}">{$vo.title|default=''}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">创建时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="create_at" class="layui-input" placeholder="请选择创建时间">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn" data-search="currentTableId">搜索</a>
|
||||
</div>
|
||||
|
||||
{if auth("$thisClass/add")}
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn layui-btn-normal" data-open='{:url("$thisClass/add")}' data-title="添加文章">添加</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if auth("$thisClass/del")}
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn layui-btn-danger layui-btn-normal" data-title="确定批量删除?" data-del-all='{:url("$thisClass/del")}' data-table-id="currentTableId">删除</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</blockquote>
|
||||
<!--顶部操作栏--结束-->
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
|
||||
<!--表单模板绑定--开始-->
|
||||
<script type="text/html" id="checkStatus">
|
||||
<input type="checkbox" name="{{d.id}}" value="{{d.status}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="modifyStatus" {{ d.status== 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<!--表单模板绑定--结束-->
|
||||
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{if auth("$thisClass/authorize")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-green" data-open='{:url("$thisClass/authorize")}?id={{d.id}}' data-title="角色授权">授权</a>
|
||||
{/if}
|
||||
|
||||
{if auth("$thisClass/edit")}
|
||||
<a class="layui-btn layui-btn-xs" data-open='{:url("$thisClass/edit")}?id={{d.id}}' data-title="修改菜单信息">编辑</a>
|
||||
{/if}
|
||||
|
||||
{if auth("$thisClass/del")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger" data-title="确定批量删除?" data-del='{:url("$thisClass/del")}?id={{d.id}}'>删除</a>
|
||||
{/if}
|
||||
|
||||
</script>
|
||||
<!--表单操作栏--结束-->
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{type: "checkbox", fixed: "left", width: 50,},
|
||||
{field: 'sort', title: '排序', width: 100, edit: 'text', align: "center", sort: true},
|
||||
{field: 'title', title: '角色名称', minWidth: 200, align: 'center', sort: true},
|
||||
{field: 'remark', title: '备注信息', edit: 'text', minWidth: 200, align: "center", style: 'background-color: #009688; color: #fff;', sort: true},
|
||||
{field: 'create_at', title: '创建时间', align: 'center', sort: true},
|
||||
{field: 'status', title: '启用状态', width: 110, templet: '#checkStatus', unresize: true, align: "center"},
|
||||
/**{if auth("$thisClass/authorize") || auth("$thisClass/edit") || auth("$thisClass/del")}**/
|
||||
{title: '操作', minWidth: 110, templet: '#currentTableBar', fixed: "right", align: "center"},
|
||||
/**{/if}**/
|
||||
]]);
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*/
|
||||
$.laydate.range('create_at');
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
62a2bb75-3d37-42b5-9225-578334abf58f
|
||||
@@ -0,0 +1,41 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{field: 'sort', title: '排序', width: 100, edit: 'text', align: "center", sort: true},
|
||||
{field: 'remark', title: '参数说明', align: 'center'},
|
||||
{field: 'value', title: '参数值', edit: 'text', minWidth: 200, align: "center", style: 'background-color: #009688; color: #fff; border-radius: 15px;'},
|
||||
{field: 'name', title: '参数名', align: 'center', sort: true},
|
||||
{field: 'group', title: '组名', width: 200, align: 'center', sort: true},
|
||||
]], false, 'line', 'lg', false);
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
5fbf78c3-8f20-4a2a-a835-665bcbbe1cac
|
||||
@@ -0,0 +1 @@
|
||||
6e5d5f40-ba96-41b6-9534-423eabfbbf03
|
||||
@@ -0,0 +1,82 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
{block name="style"}{/block}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{block name="cotent"}
|
||||
<form class="layui-form form-width-99admin">
|
||||
<br>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">联系电话</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="telnum" class="layui-input" lay-verify="required" value="{$result.telnum|default=''}" placeholder="请输入菜单名称" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">问题</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea id="content" class="layui-textarea" readonly>{$result.content|default=''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">图片</label>
|
||||
<div class="layui-input-block" id="photo-list">
|
||||
{if !empty($result.img1)}
|
||||
<img style="width: 100px; height: 100px;" src="{$result.img1}" data-image="open" lay-filter="modifyHeadImg">
|
||||
{/if}
|
||||
{if !empty($result.img2)}
|
||||
<img style="width: 100px; height: 100px;" src="{$result.img2}" data-image="open" lay-filter="modifyHeadImg">
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">回复内容</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea id="replyCon" class="layui-textarea" placeholder="请输入回复内容">{$result.reply|default=''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{if !empty($result)}
|
||||
<input type="hidden" class="id" id="id" value="{$result.id|default=''}">
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-sm" id="submitBtn">点击回复</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-primary" data-close="closeOpen">取消</button>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
$('#photo-list img').on('click', function () {
|
||||
layer.photos({
|
||||
photos: '#photo-list',
|
||||
shadeClose: false,
|
||||
closeBtn: 2,
|
||||
anim: 0
|
||||
});
|
||||
})
|
||||
});
|
||||
/**
|
||||
* 添加、编辑
|
||||
*/
|
||||
$("#submitBtn").on("click", function () {
|
||||
var url = '{if empty($result)}{:url("$thisClass/reply")}{/if}';
|
||||
var data = {
|
||||
id: $("#id").val(),
|
||||
replyCon: $("#replyCon").val()
|
||||
};
|
||||
$.request.post(url, data, function (res) {
|
||||
$.msg.success(res.msg, function () {
|
||||
$.tool.reload('open');
|
||||
})
|
||||
})
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,132 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--顶部操作栏--开始-->
|
||||
<blockquote id="searchBlock" class="layui-elem-quote quoteBox">
|
||||
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="telnum" class="layui-input" placeholder="请输入手机号"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="type" lay-verify="required" lay-search id="type">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
<option value="1">考生建议</option>
|
||||
<option value="2">账号问题</option>
|
||||
<option value="3">成绩问题</option>
|
||||
<option value="4">付费问题</option>
|
||||
<option value="5">其他问题</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status" lay-verify="required" lay-search id="status">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
<option value="1">未回复</option>
|
||||
<option value="2">已回复</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">创建时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="add_time" class="layui-input " placeholder="请选择创建时间">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn" data-search="currentTableId">搜索</a>
|
||||
</div>
|
||||
|
||||
|
||||
</blockquote>
|
||||
<!--顶部操作栏--结束-->
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
<!--表单模板绑定--开始-->
|
||||
<script type="text/html" id="bindImg1">
|
||||
<img style="width: 30px; height: 30px;" src="{{d.img1}}" layer-src="{{d.img1}}" data-image="open" lay-filter="modifyHeadImg">
|
||||
</script>
|
||||
<script type="text/html" id="bindImg2">
|
||||
<img style="width: 30px; height: 30px;" src="{{d.img2}}" layer-src="{{d.img2}}" data-image="open" lay-filter="modifyHeadImg">
|
||||
</script>
|
||||
<script type="text/html" id="checkStatus">
|
||||
{{#if(d.status == 1){}}
|
||||
<div id="status{{d.id}}" style="color:red">未回复</div>
|
||||
{{#}else{}}
|
||||
<div id="status{{d.id}}" style="color:green">已回复</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
<!--表单模板绑定--结束-->
|
||||
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{if auth("$thisClass/details")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-sm" data-open='{:url("$thisClass/reply")}?id={{d.id}}' style="background: #0d8ddb" data-title="回复留言" >回复</a>
|
||||
{/if}
|
||||
|
||||
</script>
|
||||
<!--表单操作栏--结束-->
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{type: "checkbox", fixed: "left", width: 50},
|
||||
{field: 'telnum', title: '联系电话', align: 'center'},
|
||||
{field: 'type', title: '类型', align: 'center'},
|
||||
{field: 'img1', title: '图片1', templet: '#bindImg1',align: 'center'},
|
||||
{field: 'img2', title: '图片1',templet: '#bindImg2', align: 'center'},
|
||||
{field: 'content', title: '问题', align: 'center'},
|
||||
{field: 'status', title: '状态', templet: '#checkStatus',align: 'center'},
|
||||
{field: 'reply', title: '回复内容', align: 'center'},
|
||||
{field: 'add_time', title: '时间', align: 'center'},
|
||||
{title: '操作', minWidth: 50, templet: '#currentTableBar', fixed: "right", align: "center"},
|
||||
|
||||
|
||||
]]);
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*/
|
||||
$.laydate.range('add_time');
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
|
||||
setTimeout(()=> {
|
||||
localStorage.setItem("fdith", document.body.clientWidth)
|
||||
},300)
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
2c14bef3-a0c4-4e0e-996a-ac6b1b104498
|
||||
@@ -0,0 +1,149 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--顶部操作栏--开始-->
|
||||
<blockquote id="searchBlock" class="layui-elem-quote quoteBox">
|
||||
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">考生所在省份</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="stu_yzy_province" lay-verify="required" lay-search id="stu_yzy_province">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
{volist name="resProvince" id="vo"}
|
||||
<option value="{$vo.code}">{$vo.title}</option>
|
||||
{/volist}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">订单号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="ord_no" class="layui-input" placeholder="请输入订单号"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="telnum" class="layui-input" placeholder="请输入手机号"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">支付方式</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="province" lay-verify="required" lay-search id="pay_way">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
<option value="1">微信</option>
|
||||
<option value="2">支付宝</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">订单状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="province" lay-verify="required" lay-search id="status">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
<option value="1">未支付</option>
|
||||
<option value="2">已支付</option>
|
||||
<option value="3">已退款</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">创建时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="add_time" class="layui-input " placeholder="请选择创建时间">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn" data-search="currentTableId">搜索</a>
|
||||
</div>
|
||||
|
||||
|
||||
</blockquote>
|
||||
<!--顶部操作栏--结束-->
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
<script type="text/html" id="payWay">
|
||||
{{#if(d.pay_way == 1){}}
|
||||
<div>微信</div>
|
||||
{{#}else{}}
|
||||
<div >支付宝</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
<script type="text/html" id="checkStatus">
|
||||
{{#if(d.status == 1){}}
|
||||
<div id="status{{d.id}}" style="color:green">已支付</div>
|
||||
{{#}else if(d.status == 2){}}
|
||||
<div id="status{{d.id}}" style="color:red">已退款</div>
|
||||
{{#}else{}}
|
||||
<div id="status{{d.id}}">待支付</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
<!--表单模板绑定--结束-->
|
||||
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{if auth("$thisClass/details")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-sm" data-open='{:url("$thisClass/details")}?id={{d.user_id}}' style="background: #0d8ddb" data-title="订单详情" >用戶全部订单</a>
|
||||
{/if}
|
||||
|
||||
</script>
|
||||
<!--表单操作栏--结束-->
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{field: 'ord_no', title: '订单号',fixed: "left", align: 'center'},
|
||||
{field: 'telnum', title: '手机号', align: 'center'},
|
||||
{field: 'userInfo', title: '考生信息', align: 'center'},
|
||||
{field: 'vipName', title: '权限类型', align: 'center'},
|
||||
{field: 'pay_way', title: '支付方式', align: 'center',templet: '#payWay'},
|
||||
{field: 'money', title: '金額', align: 'center'},
|
||||
{field: 'status', title: '状态', templet: '#checkStatus',align: 'center'},
|
||||
{field: 'order_time', title: '时间', align: 'center',width: 400, fixed: "right"},
|
||||
{title: '操作', minWidth: 110, templet: '#currentTableBar', fixed: "right", align: "center"},
|
||||
|
||||
|
||||
]]);
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*/
|
||||
$.laydate.range('add_time');
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
|
||||
setTimeout(()=> {
|
||||
localStorage.setItem("fdith", document.body.clientWidth)
|
||||
},300)
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
3e12f413-d76d-4196-a193-03ac1cb602ca
|
||||
@@ -0,0 +1,107 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
{block name="style"}{/block}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
<link href="__STATIC__/plugs/tag-it/css/jquery.tagit.css" rel="stylesheet" type="text/css">
|
||||
<link href="__STATIC__/plugs/tag-it/css/tagit.ui-zendesk.css" rel="stylesheet" type="text/css">
|
||||
{block name="cotent"}
|
||||
<form class="layui-form form-width-99admin" action="">
|
||||
<br>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">省份</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<select name="province_id" lay-verify="required" id="province_id" lay-filter="province_id">
|
||||
<option value="0">请选择省份</option>
|
||||
{foreach $province_list as $vo}
|
||||
<option value="{$vo.code|default=''}" {if !empty($res.province_id) and $res.province_id eq $vo.code}selected{/if}>{$vo.title|default=''}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">批次名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="batchName" class="layui-input" lay-verify="required" value="{$res.batchName|default=''}" placeholder="批次名称">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">批次序列</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="batch" class="layui-input" lay-verify="required" value="{$res.batch|default=''}" placeholder="批次序列">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">年份</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="year" class="layui-input" lay-verify="required" value="{$res.year|default=''}" placeholder="请输入年份如2020">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">高考总分</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="GaoKaoTotal" class="layui-input" lay-verify="required" value="{$res.GaoKaoTotal|default=''}" placeholder="请输入高考总分">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">文科分数线</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="ArtsScore" class="layui-input" lay-verify="required" value="{$res.ArtsScore|default=''}" placeholder="文科分数线">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">理科分数线</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="SciencesScore" class="layui-input" lay-verify="required" value="{$res.SciencesScore|default=''}" placeholder="理科分数线">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{if !empty($res)}
|
||||
<input type="hidden" class="id" id="id" value="{$res.id|default=''}">
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn layui-btn-sm" id="submitBtn">提交</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-primary" data-close="closeOpen">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script type="text/javascript" src="/static/plugs/tag-it/js/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="__STATIC__/plugs/tag-it/js/tag-it.js" charset="utf-8"></script>
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 添加、编辑
|
||||
*/
|
||||
$("#submitBtn").on("click", function () {
|
||||
var url = '{if empty($res)}{:url("$thisClass/add")}{else/}{:url("$thisClass/edit")}{/if}';
|
||||
var data = {
|
||||
id: $("#id").val(),
|
||||
province_id: $("#province_id").val(),
|
||||
province_title: $("#province_id option:selected").text(),
|
||||
batch: $("#batch").val(),
|
||||
year: $("#year").val(),
|
||||
batchName: $("#batchName").val(),
|
||||
GaoKaoTotal: $("#GaoKaoTotal").val(),
|
||||
ArtsScore: $("#ArtsScore").val(),
|
||||
SciencesScore: $("#SciencesScore").val()
|
||||
};
|
||||
$.request.post(url, data, function (res) {
|
||||
$.msg.success(res.msg, function () {
|
||||
$.tool.reload('open');
|
||||
})
|
||||
})
|
||||
return false;
|
||||
});
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,97 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--顶部操作栏--开始-->
|
||||
<blockquote id="searchBlock" class="layui-elem-quote quoteBox">
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">省份</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="province_id" lay-verify="required" lay-search id="province_id">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
{volist name="resProvince" id="vo"}
|
||||
<option value="{$vo.code}">{$vo.title}</option>
|
||||
{/volist}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn" data-search="currentTableId">搜索</a>
|
||||
</div>
|
||||
{if auth("$thisClass/add")}
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn layui-btn-normal" data-open='{:url("$thisClass/add")}' data-title="添加" data-width="500px" data-height="500px">添加</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
|
||||
</blockquote>
|
||||
<!--顶部操作栏--结束-->
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
|
||||
|
||||
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{if auth("$thisClass/edit")}
|
||||
<a class="layui-btn layui-btn-xs" data-open='{:url("$thisClass/edit")}?id={{d.id}}' data-title="修改分类信息" data-width="500px" data-height="500px">编辑</a>
|
||||
{/if}
|
||||
|
||||
{if auth("$thisClass/del")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger" data-title="确定删除?" data-del='{:url("$thisClass/del")}?id={{d.id}}'>删除</a>
|
||||
{/if}
|
||||
|
||||
</script>
|
||||
<!--表单操作栏--结束-->
|
||||
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{type: "checkbox", width: 50, fixed: "left"},
|
||||
{field: 'province_title', title: '省份', width: 100, align: "center"},
|
||||
{field: 'batchName', title: '批次', minWidth: 100, align: 'center'},
|
||||
{field: 'GaoKaoTotal', title: '高考总分', minWidth: 100, align: 'center'},
|
||||
{field: 'ArtsScore', title: '文科分数线', align: 'center', minWidth: 150},
|
||||
{field: 'SciencesScore', title: '理科分数线', align: 'center', minWidth: 150},
|
||||
/**{if auth("$thisClass/edit") || auth("$thisClass/del")}**/
|
||||
{title: '操作', minWidth: 100, templet: '#currentTableBar', fixed: "right", align: "center"}
|
||||
/**{/if}**/
|
||||
]]);
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*/
|
||||
$.laydate.range('create_time');
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
7ea1ae97-7216-43e8-929c-40c53b51ddc4
|
||||
@@ -0,0 +1,127 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
|
||||
<form class="layui-form">
|
||||
|
||||
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<script type="text/html" id="returnStatus">
|
||||
{{#if(d.return_status == 1){}}
|
||||
<div id="returnStatus{{d.id}}">未退款</div>
|
||||
{{#}else if(d.return_status == 2){}}
|
||||
<div id="returnStatus{{d.id}}">待退款</div>
|
||||
{{#}else if(d.return_status == 3){}}
|
||||
<div id="returnStatus{{d.id}}">部分退款</div>
|
||||
{{#}else{}}
|
||||
<div id="returnStatus{{d.id}}">已退款</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="payWay">
|
||||
{{#if(d.pay_way == 1){}}
|
||||
<div>微信</div>
|
||||
{{#}else{}}
|
||||
<div >支付宝</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{{#if(d.status == 1){}}
|
||||
{{#if(d.pay_way == 1){}}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger" data-title="确定退款?" onclick="returnOrder('{{d.id}}','{{d.pay_way}}')" id="clickStatus{{d.id}}">微信退款</a>
|
||||
{{#}else{}}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger" data-title="确定退款?" onclick="returnOrder('{{d.id}}','{{d.pay_way}}')" id="clickStatus{{d.id}}">支付宝退款</a>
|
||||
{{#}}}
|
||||
{{#}}}
|
||||
|
||||
</script>
|
||||
<script type="text/html" id="checkStatus">
|
||||
{{#if(d.status == 1){}}
|
||||
<div id="status{{d.id}}" style="color:green">已支付</div>
|
||||
{{#}else if(d.status == 2){}}
|
||||
<div id="status{{d.id}}" style="color:red">已退款</div>
|
||||
{{#}else{}}
|
||||
<div id="status{{d.id}}">待支付</div>
|
||||
{{#}}}
|
||||
</script>
|
||||
</form>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
|
||||
var screenWith = localStorage.getItem("fdith") / 8 - 3;
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax&user_id={$user_id}', [[
|
||||
|
||||
{field: 'ord_no', title: '订单号', width: screenWith,fixed: "left", align: "center"},
|
||||
{field: 'userInfo', title: '考生信息', width:screenWith, align: "center"},
|
||||
{field: 'vipName', title: '权限类型',width:screenWith,align: "center"},
|
||||
{field: 'money', title: '价格', width:screenWith, align: "center"},
|
||||
{field: 'pay_way', title: '支付方式',width:screenWith, align: "center",templet: '#payWay'},
|
||||
{field: 'status', title: '状态',templet: '#checkStatus',width:screenWith, align: "center"},
|
||||
{field: 'add_time', title: '下单时间',width:screenWith, align: "center"},
|
||||
{field: 'pay_time', title: '支付时间', width:screenWith,align: "center"},
|
||||
{title: '操作', templet: '#currentTableBar',width:screenWith, fixed: "right", align: "center"},
|
||||
|
||||
|
||||
]], false, 'line', 'lg', true);
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
|
||||
//退款
|
||||
function returnOrder(id,payWay) {
|
||||
layer.open({
|
||||
type: 1,
|
||||
skin: 'layui-layer-rim', //加上边框
|
||||
title: '退款',
|
||||
area: ['300px', '180px'], //宽高
|
||||
content: '<div class="layui-form-item layui-inline" div style="padding:10px 40px">\n' +
|
||||
'<div class="layui-input-inline">\n' +
|
||||
'<input type="text" class="layui-input selectBlock" value="网络原因" />\n' +
|
||||
'</div>\n' +
|
||||
'</div> <div style="padding:5px 60px"><a class="layui-btn layui-btn-normal" id="statusDiv'+id+'">点击退款</a></div>',
|
||||
success: function(layero, index){
|
||||
$('#statusDiv'+id).click(function(){
|
||||
var reason = layero.find('input')[0].value;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: '{:url("$thisClass/refundOrder")}',
|
||||
data: "id=" + id + '&reason='+reason+'&payWay='+payWay,
|
||||
success: function (data) {
|
||||
if (data.code == 0) {
|
||||
layer.alert(data.msg);
|
||||
} else if (data.code == 1) {
|
||||
layer.alert(data.msg);
|
||||
$("#status" + id).html('<span style="color:red">已退款</span>');
|
||||
layer.close(index);
|
||||
$(".layui-btn#clickStatus" + id).css("display", "none");
|
||||
} else {
|
||||
layer.closeAll();
|
||||
layer.alert('退款失败');
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,107 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<form class="layui-form">
|
||||
|
||||
<!--顶部操作栏--开始-->
|
||||
<blockquote id="searchBlock" class="layui-elem-quote quoteBox">
|
||||
|
||||
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="phone" class="layui-input" placeholder="请输入手机号"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">考生所在省份</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="province" lay-verify="required" lay-search id="province">
|
||||
<option value="0">直接选择或搜索选择</option>
|
||||
{volist name="resProvince" id="vo"}
|
||||
<option value="{$key}">{$vo.title}</option>
|
||||
{/volist}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label-99admin">创建时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="add_time" class="layui-input " placeholder="请选择创建时间">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-inline">
|
||||
<a class="layui-btn" data-search="currentTableId">搜索</a>
|
||||
</div>
|
||||
|
||||
|
||||
</blockquote>
|
||||
<!--顶部操作栏--结束-->
|
||||
|
||||
<!--主表单渲染--开始-->
|
||||
<table id="currentTable" lay-filter="currentTable"></table>
|
||||
<!--主表单渲染--结束-->
|
||||
|
||||
<!--表单模板绑定--开始-->
|
||||
<script type="text/html" id="bindHeadImg">
|
||||
<img style="width: 30px; height: 30px;" src="{{d.head_img}}" layer-src="{{d.head_img}}" alt="{{d.nickname}}" data-image="open" lay-filter="modifyHeadImg">
|
||||
</script>
|
||||
|
||||
<!--表单模板绑定--结束-->
|
||||
|
||||
<!--表单操作栏--开始-->
|
||||
<script type="text/html" id="currentTableBar">
|
||||
|
||||
{if auth("$thisClass/details")}
|
||||
<a class="layui-btn layui-btn-xs layui-btn-sm" data-open='{:url("$thisClass/details")}?id={{d.id}}' style="background: #0d8ddb" data-title="订单详情" >查看订单</a>
|
||||
{/if}
|
||||
|
||||
</script>
|
||||
<!--表单操作栏--结束-->
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
|
||||
/**
|
||||
* 生成表单
|
||||
*/
|
||||
$.form.table('current', '{:url("$thisRequest")}?type=ajax', [[
|
||||
{type: "checkbox", fixed: "left", width: 50},
|
||||
{field: 'phone', title: '用户手机', align: 'center'},
|
||||
{field: 'userInfo', title: '考生信息', align: 'center'},
|
||||
{field: 'add_time', title: '创建时间', align: 'center', minWidth: 150},
|
||||
/**{if auth("$thisClass/edit_password") || auth("$thisClass/edit") || auth("$thisClass/del")}**/
|
||||
{title: '操作', minWidth: 110, templet: '#currentTableBar', fixed: "right", align: "center"},
|
||||
/**{/if}**/
|
||||
]]);
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*/
|
||||
$.laydate.range('add_time');
|
||||
|
||||
/**
|
||||
* 监听字段值编辑
|
||||
*/
|
||||
$.form.editField('currentTable', '{:url("$thisRequest")}');
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
|
||||
|
||||
setTimeout(()=> {
|
||||
localStorage.setItem("fdith", document.body.clientWidth)
|
||||
},300)
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
9d762c35-05b2-4218-a300-4a5945fda3fa
|
||||
778
芳林公司项目/www.zhiyuanhelp.com/application/admin/view/icon/fa.html
Normal file
778
芳林公司项目/www.zhiyuanhelp.com/application/admin/view/icon/fa.html
Normal file
@@ -0,0 +1,778 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
<style>
|
||||
h4{ font-size:18px;font-family:"Microsoft YaHei","Simsun",Arial; font-weight:normal; line-height:1; padding:0; margin:0;}
|
||||
.section{ padding:20px;}
|
||||
.section h4 span{ color:#0084e9;}
|
||||
.fa {font-size: 25px !important;}
|
||||
.fa:hover {font-size: 50px !important;}
|
||||
</style>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<div class="section" id="all">
|
||||
<h4><span>全部图标</span> Web Application Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-adjust"></i><span>fa-adjust</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-anchor"></i><span>fa-anchor</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-archive"></i><span>fa-archive</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-area-chart"></i><span>fa-area-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows"></i><span>fa-arrows</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-h"></i><span>fa-arrows-h</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-v"></i><span>fa-arrows-v</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-asterisk"></i><span>fa-asterisk</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-at"></i><span>fa-at</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-automobile"></i><span>fa-automobile</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ban"></i><span>fa-ban</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bank"></i><span>fa-bank</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bar-chart"></i><span>fa-bar-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bar-chart-o"></i><span>fa-bar-chart-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-barcode"></i><span>fa-barcode</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bars"></i><span>fa-bars</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bed"></i><span>fa-bed</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-beer"></i><span>fa-beer</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bell"></i><span>fa-bell</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bell-o"></i><span>fa-bell-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bell-slash"></i><span>fa-bell-slash</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bell-slash-o"></i><span>fa-bell-slash-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bicycle"></i><span>fa-bicycle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-binoculars"></i><span>fa-binoculars</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-birthday-cake"></i><span>fa-birthday-cake</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bolt"></i><span>fa-bolt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bomb"></i><span>fa-bomb</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-book"></i><span>fa-book</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bookmark"></i><span>fa-bookmark</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bookmark-o"></i><span>fa-bookmark-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-briefcase"></i><span>fa-briefcase</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bug"></i><span>fa-bug</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-building"></i><span>fa-building</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-building-o"></i><span>fa-building-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bullhorn"></i><span>fa-bullhorn</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bullseye"></i><span>fa-bullseye</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bus"></i><span>fa-bus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cab"></i><span>fa-cab</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-calculator"></i><span>fa-calculator</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-calendar"></i><span>fa-calendar</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-calendar-o"></i><span>fa-calendar-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-camera"></i><span>fa-camera</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-camera-retro"></i><span>fa-camera-retro</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-car"></i><span>fa-car</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-down"></i><span>fa-caret-square-o-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-left"></i><span>fa-caret-square-o-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-right"></i><span>fa-caret-square-o-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-up"></i><span>fa-caret-square-o-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cart-arrow-down"></i><span>fa-cart-arrow-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cart-plus"></i><span>fa-cart-plus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc"></i><span>fa-cc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-certificate"></i><span>fa-certificate</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check"></i><span>fa-check</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-circle"></i><span>fa-check-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-circle-o"></i><span>fa-check-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-square"></i><span>fa-check-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-square-o"></i><span>fa-check-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-child"></i><span>fa-child</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle"></i><span>fa-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-o"></i><span>fa-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-o-notch"></i><span>fa-circle-o-notch</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-thin"></i><span>fa-circle-thin</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-clock-o"></i><span>fa-clock-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-close"></i><span>fa-close</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cloud"></i><span>fa-cloud</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cloud-download"></i><span>fa-cloud-download</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cloud-upload"></i><span>fa-cloud-upload</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-code"></i><span>fa-code</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-code-fork"></i><span>fa-code-fork</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-coffee"></i><span>fa-coffee</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cog"></i><span>fa-cog</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cogs"></i><span>fa-cogs</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-comment"></i><span>fa-comment</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-comment-o"></i><span>fa-comment-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-comments"></i><span>fa-comments</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-comments-o"></i><span>fa-comments-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-compass"></i><span>fa-compass</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-copyright"></i><span>fa-copyright</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-credit-card"></i><span>fa-credit-card</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-crop"></i><span>fa-crop</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-crosshairs"></i><span>fa-crosshairs</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cube"></i><span>fa-cube</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cubes"></i><span>fa-cubes</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cutlery"></i><span>fa-cutlery</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dashboard"></i><span>fa-dashboard</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-database"></i><span>fa-database</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-desktop"></i><span>fa-desktop</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-diamond"></i><span>fa-diamond</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dot-circle-o"></i><span>fa-dot-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-download"></i><span>fa-download</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-edit"></i><span>fa-edit</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ellipsis-h"></i><span>fa-ellipsis-h</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ellipsis-v"></i><span>fa-ellipsis-v</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-envelope"></i><span>fa-envelope</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-envelope-o"></i><span>fa-envelope-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-envelope-square"></i><span>fa-envelope-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eraser"></i><span>fa-eraser</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-exchange"></i><span>fa-exchange</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-exclamation"></i><span>fa-exclamation</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-exclamation-circle"></i><span>fa-exclamation-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-exclamation-triangle"></i><span>fa-exclamation-triangle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-external-link"></i><span>fa-external-link</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-external-link-square"></i><span>fa-external-link-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eye"></i><span>fa-eye</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eye-slash"></i><span>fa-eye-slash</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eyedropper"></i><span>fa-eyedropper</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fax"></i><span>fa-fax</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-female"></i><span>fa-female</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fighter-jet"></i><span>fa-fighter-jet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-archive-o"></i><span>fa-file-archive-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-audio-o"></i><span>fa-file-audio-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-code-o"></i><span>fa-file-code-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-excel-o"></i><span>fa-file-excel-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-image-o"></i><span>fa-file-image-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-movie-o"></i><span>fa-file-movie-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-pdf-o"></i><span>fa-file-pdf-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-photo-o"></i><span>fa-file-photo-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-picture-o"></i><span>fa-file-picture-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-powerpoint-o"></i><span>fa-file-powerpoint-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-sound-o"></i><span>fa-file-sound-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-video-o"></i><span>fa-file-video-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-word-o"></i><span>fa-file-word-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-zip-o"></i><span>fa-file-zip-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-film"></i><span>fa-film</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-filter"></i><span>fa-filter</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fire"></i><span>fa-fire</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fire-extinguisher"></i><span>fa-fire-extinguisher</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flag"></i><span>fa-flag</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flag-checkered"></i><span>fa-flag-checkered</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flag-o"></i><span>fa-flag-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flash"></i><span>fa-flash</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flask"></i><span>fa-flask</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-folder"></i><span>fa-folder</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-folder-o"></i><span>fa-folder-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-folder-open"></i><span>fa-folder-open</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-folder-open-o"></i><span>fa-folder-open-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-frown-o"></i><span>fa-frown-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-futbol-o"></i><span>fa-futbol-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gamepad"></i><span>fa-gamepad</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gavel"></i><span>fa-gavel</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gear"></i><span>fa-gear</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gears"></i><span>fa-gears</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-genderless"></i><span>fa-genderless</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gift"></i><span>fa-gift</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-glass"></i><span>fa-glass</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-globe"></i><span>fa-globe</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-graduation-cap"></i><span>fa-graduation-cap</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-group"></i><span>fa-group</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hdd-o"></i><span>fa-hdd-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-headphones"></i><span>fa-headphones</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heart"></i><span>fa-heart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heart-o"></i><span>fa-heart-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heartbeat"></i><span>fa-heartbeat</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-history"></i><span>fa-history</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-home"></i><span>fa-home</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hotel"></i><span>fa-hotel</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-image"></i><span>fa-image</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-inbox"></i><span>fa-inbox</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-info"></i><span>fa-info</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-info-circle"></i><span>fa-info-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-institution"></i><span>fa-institution</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-key"></i><span>fa-key</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-keyboard-o"></i><span>fa-keyboard-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-language"></i><span>fa-language</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-laptop"></i><span>fa-laptop</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-leaf"></i><span>fa-leaf</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-legal"></i><span>fa-legal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-lemon-o"></i><span>fa-lemon-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-level-down"></i><span>fa-level-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-level-up"></i><span>fa-level-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-life-bouy"></i><span>fa-life-bouy</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-life-buoy"></i><span>fa-life-buoy</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-life-ring"></i><span>fa-life-ring</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-life-saver"></i><span>fa-life-saver</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-lightbulb-o"></i><span>fa-lightbulb-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-line-chart"></i><span>fa-line-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-location-arrow"></i><span>fa-location-arrow</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-lock"></i><span>fa-lock</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-magic"></i><span>fa-magic</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-magnet"></i><span>fa-magnet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mail-forward"></i><span>fa-mail-forward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mail-reply"></i><span>fa-mail-reply</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mail-reply-all"></i><span>fa-mail-reply-all</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-male"></i><span>fa-male</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-map-marker"></i><span>fa-map-marker</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-meh-o"></i><span>fa-meh-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-microphone"></i><span>fa-microphone</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-microphone-slash"></i><span>fa-microphone-slash</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus"></i><span>fa-minus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus-circle"></i><span>fa-minus-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus-square"></i><span>fa-minus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus-square-o"></i><span>fa-minus-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mobile"></i><span>fa-mobile</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mobile-phone"></i><span>fa-mobile-phone</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-money"></i><span>fa-money</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-moon-o"></i><span>fa-moon-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mortar-board"></i><span>fa-mortar-board</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-motorcycle"></i><span>fa-motorcycle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-music"></i><span>fa-music</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-navicon"></i><span>fa-navicon</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-newspaper-o"></i><span>fa-newspaper-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paint-brush"></i><span>fa-paint-brush</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paper-plane"></i><span>fa-paper-plane</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paper-plane-o"></i><span>fa-paper-plane-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paw"></i><span>fa-paw</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pencil"></i><span>fa-pencil</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pencil-square"></i><span>fa-pencil-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pencil-square-o"></i><span>fa-pencil-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-phone"></i><span>fa-phone</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-phone-square"></i><span>fa-phone-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-photo"></i><span>fa-photo</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-picture-o"></i><span>fa-picture-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pie-chart"></i><span>fa-pie-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plane"></i><span>fa-plane</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plug"></i><span>fa-plug</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus"></i><span>fa-plus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-circle"></i><span>fa-plus-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-square"></i><span>fa-plus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-square-o"></i><span>fa-plus-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-power-off"></i><span>fa-power-off</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-print"></i><span>fa-print</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-puzzle-piece"></i><span>fa-puzzle-piece</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-qrcode"></i><span>fa-qrcode</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-question"></i><span>fa-question</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-question-circle"></i><span>fa-question-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-quote-left"></i><span>fa-quote-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-quote-right"></i><span>fa-quote-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-random"></i><span>fa-random</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-recycle"></i><span>fa-recycle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-refresh"></i><span>fa-refresh</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-remove"></i><span>fa-remove</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-reorder"></i><span>fa-reorder</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-reply"></i><span>fa-reply</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-reply-all"></i><span>fa-reply-all</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-retweet"></i><span>fa-retweet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-road"></i><span>fa-road</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rocket"></i><span>fa-rocket</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rss"></i><span>fa-rss</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rss-square"></i><span>fa-rss-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-search"></i><span>fa-search</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-search-minus"></i><span>fa-search-minus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-search-plus"></i><span>fa-search-plus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-send"></i><span>fa-send</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-send-o"></i><span>fa-send-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-server"></i><span>fa-server</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share"></i><span>fa-share</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-alt"></i><span>fa-share-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-alt-square"></i><span>fa-share-alt-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-square"></i><span>fa-share-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-square-o"></i><span>fa-share-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-shield"></i><span>fa-shield</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ship"></i><span>fa-ship</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-shopping-cart"></i><span>fa-shopping-cart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sign-in"></i><span>fa-sign-in</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sign-out"></i><span>fa-sign-out</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-signal"></i><span>fa-signal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sitemap"></i><span>fa-sitemap</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sliders"></i><span>fa-sliders</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-smile-o"></i><span>fa-smile-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-soccer-ball-o"></i><span>fa-soccer-ball-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort"></i><span>fa-sort</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-alpha-asc"></i><span>fa-sort-alpha-asc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-alpha-desc"></i><span>fa-sort-alpha-desc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-amount-asc"></i><span>fa-sort-amount-asc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-amount-desc"></i><span>fa-sort-amount-desc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-asc"></i><span>fa-sort-asc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-desc"></i><span>fa-sort-desc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-down"></i><span>fa-sort-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-numeric-asc"></i><span>fa-sort-numeric-asc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-numeric-desc"></i><span>fa-sort-numeric-desc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sort-up"></i><span>fa-sort-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-space-shuttle"></i><span>fa-space-shuttle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-spinner"></i><span>fa-spinner</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-spoon"></i><span>fa-spoon</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-square"></i><span>fa-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-square-o"></i><span>fa-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star"></i><span>fa-star</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star-half"></i><span>fa-star-half</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star-half-empty"></i><span>fa-star-half-empty</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star-half-full"></i><span>fa-star-half-full</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star-half-o"></i><span>fa-star-half-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-star-o"></i><span>fa-star-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-street-view"></i><span>fa-street-view</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-suitcase"></i><span>fa-suitcase</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sun-o"></i><span>fa-sun-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-support"></i><span>fa-support</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tablet"></i><span>fa-tablet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tachometer"></i><span>fa-tachometer</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tag"></i><span>fa-tag</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tags"></i><span>fa-tags</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tasks"></i><span>fa-tasks</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-taxi"></i><span>fa-taxi</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-terminal"></i><span>fa-terminal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-thumb-tack"></i><span>fa-thumb-tack</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-thumbs-down"></i><span>fa-thumbs-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-thumbs-o-down"></i><span>fa-thumbs-o-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-thumbs-o-up"></i><span>fa-thumbs-o-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-thumbs-up"></i><span>fa-thumbs-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ticket"></i><span>fa-ticket</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-times"></i><span>fa-times</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-times-circle"></i><span>fa-times-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-times-circle-o"></i><span>fa-times-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tint"></i><span>fa-tint</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-down"></i><span>fa-toggle-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-left"></i><span>fa-toggle-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-off"></i><span>fa-toggle-off</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-on"></i><span>fa-toggle-on</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-right"></i><span>fa-toggle-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-toggle-up"></i><span>fa-toggle-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-trash"></i><span>fa-trash</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-trash-o"></i><span>fa-trash-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tree"></i><span>fa-tree</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-trophy"></i><span>fa-trophy</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-truck"></i><span>fa-truck</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tty"></i><span>fa-tty</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-umbrella"></i><span>fa-umbrella</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-university"></i><span>fa-university</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-unlock"></i><span>fa-unlock</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-unlock-alt"></i><span>fa-unlock-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-unsorted"></i><span>fa-unsorted</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-upload"></i><span>fa-upload</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-user"></i><span>fa-user</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-user-plus"></i><span>fa-user-plus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-user-secret"></i><span>fa-user-secret</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-user-times"></i><span>fa-user-times</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-users"></i><span>fa-users</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-video-camera"></i><span>fa-video-camera</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-down"></i><span>fa-volume-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-off"></i><span>fa-volume-off</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-up"></i><span>fa-volume-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-warning"></i><span>fa-warning</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wheelchair"></i><span>fa-wheelchair</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wifi"></i><span>fa-wifi</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wrench"></i><span>fa-wrench</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="transportation">
|
||||
<h4><span>运输工具</span> Transportation Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ambulance"></i><span>fa-ambulance</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-car"></i><span>fa-car</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bicycle"></i><span>fa-bicycle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bus"></i><span>fa-bus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-taxi"></i><span>fa-taxi</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fighter-jet"></i><span>fa-fighter-jet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-motorcycle"></i><span>fa-motorcycle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plane"></i><span>fa-plane</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rocket"></i><span>fa-rocket</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ship"></i><span>fa-ship</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-space-shuttle"></i><span>fa-space-shuttle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-subway"></i><span>fa-subway</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-train"></i><span>fa-train</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-truck"></i><span>fa-truck</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wheelchair"></i><span>fa-wheelchair</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="gender">
|
||||
<h4><span>性别</span> Gender Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-thin"></i><span>fa-circle-thin</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mars"></i><span>fa-mars</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mars-double"></i><span>fa-mars-double</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mars-stroke"></i><span>fa-mars-stroke</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mars-stroke-h"></i><span>fa-mars-stroke-h</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mars-stroke-v"></i><span>fa-mars-stroke-v</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-mercury"></i><span>fa-mercury</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-neuter"></i><span>fa-neuter</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-transgender"></i><span>fa-transgender</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-transgender-alt"></i><span>fa-transgender-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-venus"></i><span>fa-venus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-venus-double"></i><span>fa-venus-double</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-venus-mars"></i><span>fa-venus-mars</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="file">
|
||||
<h4><span>文件类型</span> File Type Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file"></i><span>fa-file</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-archive-o"></i><span>fa-file-archive-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-audio-o"></i><span>fa-file-audio-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-code-o"></i><span>fa-file-code-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-excel-o"></i><span>fa-file-excel-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-image-o"></i><span>fa-file-image-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-video-o"></i><span>fa-file-video-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-o"></i><span>fa-file-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-pdf-o"></i><span>fa-file-pdf-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-powerpoint-o"></i><span>fa-file-powerpoint-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-text"></i><span>fa-file-text</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-text-o"></i><span>fa-file-text-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-word-o"></i><span>fa-file-word-o</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="spinner">
|
||||
<h4><span>旋转加载</span> Spinner Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cog"></i><span>fa-cog</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-o-notch"></i><span>fa-circle-o-notch</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-refresh"></i><span>fa-refresh</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-spinner"></i><span>fa-spinner</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="form">
|
||||
<h4><span>表单控件</span> Form Control Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-square"></i><span>fa-check-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-check-square-o"></i><span>fa-check-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle"></i><span>fa-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-circle-o"></i><span>fa-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dot-circle-o"></i><span>fa-dot-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus-square"></i><span>fa-minus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-minus-square-o"></i><span>fa-minus-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-square"></i><span>fa-plus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-square-o"></i><span>fa-plus-square-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-square"></i><span>fa-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-square-o"></i><span>fa-square-o</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="payment">
|
||||
<h4><span>支付方式</span> Payment Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-amex"></i><span>fa-cc-amex</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-discover"></i><span>fa-cc-discover</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-mastercard"></i><span>fa-cc-mastercard</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-paypal"></i><span>fa-cc-paypal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-stripe"></i><span>fa-cc-stripe</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-visa"></i><span>fa-cc-visa</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-credit-card"></i><span>fa-credit-card</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-google-wallet"></i><span>fa-google-wallet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paypal"></i><span>fa-paypal</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="chart">
|
||||
<h4><span>统计</span> Chart Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-area-chart"></i><span>fa-area-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bar-chart"></i><span>fa-bar-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-line-chart"></i><span>fa-line-chart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pie-chart"></i><span>fa-pie-chart</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="currency">
|
||||
<h4><span>货币</span> Currency Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-btc"></i><span>fa-btc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-jpy"></i><span>fa-jpy</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-usd"></i><span>fa-usd</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eur"></i><span>fa-eur</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gbp"></i><span>fa-gbp</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ils"></i><span>fa-ils</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-inr"></i><span>fa-inr</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-krw"></i><span>fa-krw</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-money"></i><span>fa-money</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rub"></i><span>fa-rub</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-try"></i><span>fa-try</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="text">
|
||||
<h4><span>文本编辑</span> Text Editor Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-align-center"></i><span>fa-align-center</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-align-justify"></i><span>fa-align-justify</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-align-left"></i><span>fa-align-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-align-right"></i><span>fa-align-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bold"></i><span>fa-bold</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-font"></i><span>fa-font</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-italic"></i><span>fa-italic</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-header"></i><span>fa-header</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-underline"></i><span>fa-underline</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-text-width"></i><span>fa-text-width</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-text-height"></i><span>fa-text-height</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-strikethrough"></i><span>fa-strikethrough</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-subscript"></i><span>fa-subscript</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-superscript"></i><span>fa-superscript</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-link"></i><span>fa-link</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chain-broken"></i><span>fa-chain-broken</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-clipboard"></i><span>fa-clipboard</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-files-o"></i><span>fa-files-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-scissors"></i><span>fa-scissors</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-columns"></i><span>fa-columns</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eraser"></i><span>fa-eraser</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file"></i><span>fa-file</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-o"></i><span>fa-file-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-text"></i><span>fa-file-text</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-file-text-o"></i><span>fa-file-text-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-floppy-o"></i><span>fa-floppy-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-repeat"></i><span>fa-repeat</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-undo"></i><span>fa-undo</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-outdent"></i><span>fa-outdent</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-indent"></i><span>fa-indent</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-list"></i><span>fa-list</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-list-alt"></i><span>fa-list-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-list-ol"></i><span>fa-list-ol</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-list-ul"></i><span>fa-list-ul</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paperclip"></i><span>fa-paperclip</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paragraph"></i><span>fa-paragraph</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-table"></i><span>fa-table</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-th"></i><span>fa-th</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-th-large"></i><span>fa-th-large</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-th-list"></i><span>fa-th-list</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="directional">
|
||||
<h4><span>方向性</span> Directional Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-double-down"></i><span>fa-angle-double-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-double-left"></i><span>fa-angle-double-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-double-right"></i><span>fa-angle-double-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-double-up"></i><span>fa-angle-double-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-down"></i><span>fa-angle-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-left"></i><span>fa-angle-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-right"></i><span>fa-angle-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angle-up"></i><span>fa-angle-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-down"></i><span>fa-arrow-circle-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-left"></i><span>fa-arrow-circle-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-right"></i><span>fa-arrow-circle-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-up"></i><span>fa-arrow-circle-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-o-down"></i><span>fa-arrow-circle-o-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-o-left"></i><span>fa-arrow-circle-o-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-o-right"></i><span>fa-arrow-circle-o-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-circle-o-up"></i><span>fa-arrow-circle-o-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-down"></i><span>fa-arrow-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-left"></i><span>fa-arrow-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-right"></i><span>fa-arrow-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrow-up"></i><span>fa-arrow-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows"></i><span>fa-arrows</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-alt"></i><span>fa-arrows-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-h"></i><span>fa-arrows-h</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-v"></i><span>fa-arrows-v</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-down"></i><span>fa-caret-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-left"></i><span>fa-caret-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-right"></i><span>fa-caret-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-up"></i><span>fa-caret-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-down"></i><span>fa-caret-square-o-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-left"></i><span>fa-caret-square-o-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-right"></i><span>fa-caret-square-o-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-caret-square-o-up"></i><span>fa-caret-square-o-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-circle-down"></i><span>fa-chevron-circle-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-circle-left"></i><span>fa-chevron-circle-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-circle-right"></i><span>fa-chevron-circle-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-circle-up"></i><span>fa-chevron-circle-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-down"></i><span>fa-chevron-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-left"></i><span>fa-chevron-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-right"></i><span>fa-chevron-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-chevron-up"></i><span>fa-chevron-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hand-o-down"></i><span>fa-hand-o-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hand-o-left"></i><span>fa-hand-o-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hand-o-right"></i><span>fa-hand-o-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hand-o-up"></i><span>fa-hand-o-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-long-arrow-down"></i><span>fa-long-arrow-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-long-arrow-left"></i><span>fa-long-arrow-left</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-long-arrow-right"></i><span>fa-long-arrow-right</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-long-arrow-up"></i><span>fa-long-arrow-up</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="video">
|
||||
<h4><span>播放器控件</span> Video Player Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-arrows-alt"></i><span>fa-arrows-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-backward"></i><span>fa-backward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-compress"></i><span>fa-compress</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-eject"></i><span>fa-eject</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-expand"></i><span>fa-expand</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fast-backward"></i><span>fa-fast-backward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-fast-forward"></i><span>fa-fast-forward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-forward"></i><span>fa-forward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pause"></i><span>fa-pause</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-play"></i><span>fa-play</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-play-circle"></i><span>fa-play-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-play-circle-o"></i><span>fa-play-circle-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-step-backward"></i><span>fa-step-backward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-step-forward"></i><span>fa-step-forward</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stop"></i><span>fa-stop</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-youtube-play"></i><span>fa-youtube-play</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-off"></i><span>fa-volume-off</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-down"></i><span>fa-volume-down</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-volume-up"></i><span>fa-volume-up</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-random"></i><span>fa-random</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="medical">
|
||||
<h4><span>医疗</span> Medical Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ambulance"></i><span>fa-ambulance</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-h-square"></i><span>fa-h-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heart"></i><span>fa-heart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heart-o"></i><span>fa-heart-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-heartbeat"></i><span>fa-heartbeat</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hospital-o"></i><span>fa-hospital-o</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-medkit"></i><span>fa-medkit</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-plus-square"></i><span>fa-plus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stethoscope"></i><span>fa-stethoscope</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-user-md"></i><span>fa-user-md</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wheelchair"></i><span>fa-wheelchair</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section" id="brand">
|
||||
<h4><span>品牌</span> Brand Icons</h4>
|
||||
<hr>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-adn"></i><span>fa-adn</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-android"></i><span>fa-android</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-angellist"></i><span>fa-angellist</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-apple"></i><span>fa-apple</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-behance"></i><span>fa-behance</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-behance-square"></i><span>fa-behance-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bitbucket"></i><span>fa-bitbucket</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-bitbucket-square"></i><span>fa-bitbucket-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-btc"></i><span>fa-btc</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-buysellads"></i><span>fa-buysellads</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-amex"></i><span>fa-cc-amex</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-discover"></i><span>fa-cc-discover</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-mastercard"></i><span>fa-cc-mastercard</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-paypal"></i><span>fa-cc-paypal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-stripe"></i><span>fa-cc-stripe</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-cc-visa"></i><span>fa-cc-visa</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-codepen"></i><span>fa-codepen</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-connectdevelop"></i><span>fa-connectdevelop</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-css3"></i><span>fa-css3</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dashcube"></i><span>fa-dashcube</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-delicious"></i><span>fa-delicious</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-deviantart"></i><span>fa-deviantart</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-digg"></i><span>fa-digg</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dribbble"></i><span>fa-dribbble</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-dropbox"></i><span>fa-dropbox</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-drupal"></i><span>fa-drupal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-empire"></i><span>fa-empire</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-facebook"></i><span>fa-facebook</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-facebook-official"></i><span>fa-facebook-official</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-facebook-square"></i><span>fa-facebook-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-flickr"></i><span>fa-flickr</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-forumbee"></i><span>fa-forumbee</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-foursquare"></i><span>fa-foursquare</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-git"></i><span>fa-git</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-git-square"></i><span>fa-git-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-github"></i><span>fa-github</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-github-alt"></i><span>fa-github-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-github-square"></i><span>fa-github-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-gratipay"></i><span>fa-gratipay</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-google"></i><span>fa-google</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-google-plus"></i><span>fa-google-plus</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-google-plus-square"></i><span>fa-google-plus-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-google-wallet"></i><span>fa-google-wallet</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-hacker-news"></i><span>fa-hacker-news</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-html5"></i><span>fa-html5</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-instagram"></i><span>fa-instagram</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-ioxhost"></i><span>fa-ioxhost</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-joomla"></i><span>fa-joomla</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-jsfiddle"></i><span>fa-jsfiddle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-lastfm"></i><span>fa-lastfm</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-lastfm-square"></i><span>fa-lastfm-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-leanpub"></i><span>fa-leanpub</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-linkedin"></i><span>fa-linkedin</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-linkedin-square"></i><span>fa-linkedin-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-linux"></i><span>fa-linux</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-maxcdn"></i><span>fa-maxcdn</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-meanpath"></i><span>fa-meanpath</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-medium"></i><span>fa-medium</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-openid"></i><span>fa-openid</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pagelines"></i><span>fa-pagelines</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-paypal"></i><span>fa-paypal</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pied-piper"></i><span>fa-pied-piper</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pied-piper-alt"></i><span>fa-pied-piper-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pinterest"></i><span>fa-pinterest</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pinterest-p"></i><span>fa-pinterest-p</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-pinterest-square"></i><span>fa-pinterest-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-qq"></i><span>fa-qq</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-rebel"></i><span>fa-rebel</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-reddit"></i><span>fa-reddit</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-reddit-square"></i><span>fa-reddit-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-renren"></i><span>fa-renren</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-sellsy"></i><span>fa-sellsy</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-alt"></i><span>fa-share-alt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-share-alt-square"></i><span>fa-share-alt-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-shirtsinbulk"></i><span>fa-shirtsinbulk</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-simplybuilt"></i><span>fa-simplybuilt</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-skyatlas"></i><span>fa-skyatlas</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-skype"></i><span>fa-skype</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-slack"></i><span>fa-slack</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-slideshare"></i><span>fa-slideshare</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-soundcloud"></i><span>fa-soundcloud</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-spotify"></i><span>fa-spotify</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stack-exchange"></i><span>fa-stack-exchange</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stack-overflow"></i><span>fa-stack-overflow</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-steam"></i><span>fa-steam</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-steam-square"></i><span>fa-steam-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stumbleupon"></i><span>fa-stumbleupon</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-stumbleupon-circle"></i><span>fa-stumbleupon-circle</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tencent-weibo"></i><span>fa-tencent-weibo</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-trello"></i><span>fa-trello</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tumblr"></i><span>fa-tumblr</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-tumblr-square"></i><span>fa-tumblr-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-twitch"></i><span>fa-twitch</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-twitter"></i><span>fa-twitter</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-twitter-square"></i><span>fa-twitter-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-viacoin"></i><span>fa-viacoin</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-vimeo-square"></i><span>fa-vimeo-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-vine"></i><span>fa-vine</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-vk"></i><span>fa-vk</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-weixin"></i><span>fa-weixin</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-weibo"></i><span>fa-weibo</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-whatsapp"></i><span>fa-whatsapp</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-windows"></i><span>fa-windows</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-wordpress"></i><span>fa-wordpress</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-xing"></i><span>fa-xing</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-xing-square"></i><span>fa-xing-square</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-yahoo"></i><span>fa-yahoo</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-yelp"></i><span>fa-yelp</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-youtube"></i><span>fa-youtube</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-youtube-play"></i><span>fa-youtube-play</span></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="fa fa-youtube-square"></i><span>fa-youtube-square</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
layui.use(['form', 'layer', 'jquery'], function () {
|
||||
var form = layui.form,
|
||||
layer = parent.layer === undefined ? layui.layer : top.layer,
|
||||
element = layui.element;
|
||||
$ = layui.jquery;
|
||||
|
||||
/**
|
||||
* 复制图标编码至粘贴板
|
||||
*/
|
||||
$("body").on("click", ".icons li", function () {
|
||||
console.log('复制');
|
||||
console.log($(this).text());
|
||||
window.sessionStorage.setItem("icon", $(this).text());
|
||||
var selectIcon = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(selectIcon);
|
||||
})
|
||||
})
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,180 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
|
||||
<style>
|
||||
.layui-icon {font-size: 25px !important;}
|
||||
.layui-icon:hover {font-size: 50px !important;}
|
||||
</style>
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<textarea id="copyText"></textarea>
|
||||
<ul class="icons layui-row">
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-rate-half"></i><div class="doc-icon-code" >&#xe6c9;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-rate"></i><div class="doc-icon-code">&#xe67b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-rate-solid"></i><div class="doc-icon-code">&#xe67a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-cellphone"></i><div class="doc-icon-code">&#xe678;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-vercode"></i><div class="doc-icon-code">&#xe679;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-login-wechat"></i><div class="doc-icon-code">&#xe677;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-login-qq"></i><div class="doc-icon-code">&#xe676;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-login-weibo"></i><div class="doc-icon-code">&#xe675;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-password"></i><div class="doc-icon-code">&#xe673;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-username"></i><div class="doc-icon-code">&#xe66f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-refresh-3"></i><div class="doc-icon-code">&#xe9aa;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-auz"></i><div class="doc-icon-code">&#xe672;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-spread-left"></i><div class="doc-icon-code">&#xe66b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-shrink-right"></i><div class="doc-icon-code">&#xe668;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-snowflake"></i><div class="doc-icon-code">&#xe6b1;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-tips"></i><div class="doc-icon-code">&#xe702;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-note"></i><div class="doc-icon-code">&#xe66e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-home"></i><div class="doc-icon-code">&#xe68e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-senior"></i><div class="doc-icon-code">&#xe674;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-refresh"></i><div class="doc-icon-code">&#xe669;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-refresh-1"></i><div class="doc-icon-code">&#xe666;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-flag"></i><div class="doc-icon-code">&#xe66c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-theme"></i><div class="doc-icon-code">&#xe66a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-notice"></i><div class="doc-icon-code">&#xe667;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-website"></i><div class="doc-icon-code">&#xe7ae;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-console"></i><div class="doc-icon-code">&#xe665;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-face-surprised"></i><div class="doc-icon-code">&#xe664;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-set"></i><div class="doc-icon-code">&#xe716;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-template-1"></i><div class="doc-icon-code">&#xe656;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-app"></i><div class="doc-icon-code">&#xe653;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-template"></i><div class="doc-icon-code">&#xe663;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-praise"></i><div class="doc-icon-code">&#xe6c6;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-tread"></i><div class="doc-icon-code">&#xe6c5;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-male"></i><div class="doc-icon-code">&#xe662;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-female"></i><div class="doc-icon-code">&#xe661;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-camera"></i><div class="doc-icon-code">&#xe660;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-camera-fill"></i><div class="doc-icon-code">&#xe65d;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-more"></i><div class="doc-icon-code">&#xe65f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-more-vertical"></i><div class="doc-icon-code">&#xe671;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-rmb"></i><div class="doc-icon-code">&#xe65e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-dollar"></i><div class="doc-icon-code">&#xe659;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-diamond"></i><div class="doc-icon-code">&#xe735;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fire"></i><div class="doc-icon-code">&#xe756;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-return"></i><div class="doc-icon-code">&#xe65c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-location"></i><div class="doc-icon-code">&#xe715;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-read"></i><div class="doc-icon-code">&#xe705;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-survey"></i><div class="doc-icon-code">&#xe6b2;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-face-smile"></i><div class="doc-icon-code">&#xe6af;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-face-cry"></i><div class="doc-icon-code">&#xe69c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-cart-simple"></i><div class="doc-icon-code">&#xe698;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-cart"></i><div class="doc-icon-code">&#xe657;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-next"></i><div class="doc-icon-code">&#xe65b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-prev"></i><div class="doc-icon-code">&#xe65a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-upload-drag"></i><div class="doc-icon-code">&#xe681;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-upload"></i><div class="doc-icon-code">&#xe67c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-download-circle"></i><div class="doc-icon-code">&#xe601;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-component"></i><div class="doc-icon-code">&#xe857;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-file-b"></i><div class="doc-icon-code">&#xe655;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-user"></i><div class="doc-icon-code">&#xe770;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-find-fill"></i><div class="doc-icon-code">&#xe670;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-loading layui-icon layui-anim layui-anim-rotate layui-anim-loop"></i><div
|
||||
class="doc-icon-code">&#xe63d;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-loading-1 layui-icon layui-anim layui-anim-rotate layui-anim-loop"></i><div class="doc-icon-code">&#xe63e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-add-1"></i><div class="doc-icon-code">&#xe654;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-play"></i><div class="doc-icon-code">&#xe652;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-pause"></i><div class="doc-icon-code">&#xe651;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-headset"></i><div class="doc-icon-code">&#xe6fc;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-video"></i><div class="doc-icon-code">&#xe6ed;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-voice"></i><div class="doc-icon-code">&#xe688;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-speaker"></i><div class="doc-icon-code">&#xe645;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-del"></i><div class="doc-icon-code">&#xe64f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-code"></i><div class="doc-icon-code">&#xe64e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-html"></i><div class="doc-icon-code">&#xe64b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-strong"></i><div class="doc-icon-code">&#xe62b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-unlink"></i><div class="doc-icon-code">&#xe64d;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-picture"></i><div class="doc-icon-code">&#xe64a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-link"></i><div class="doc-icon-code">&#xe64c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-face-smile-b"></i><div class="doc-icon-code">&#xe650;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-align-left"></i><div class="doc-icon-code">&#xe649;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-align-right"></i><div class="doc-icon-code">&#xe648;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-align-center"></i><div class="doc-icon-code">&#xe647;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-u"></i><div class="doc-icon-code">&#xe646;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-i"></i><div class="doc-icon-code">&#xe644;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-tabs"></i><div class="doc-icon-code">&#xe62a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-radio"></i><div class="doc-icon-code">&#xe643;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-circle"></i><div class="doc-icon-code">&#xe63f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-edit"></i><div class="doc-icon-code">&#xe642;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-share"></i><div class="doc-icon-code">&#xe641;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-delete"></i><div class="doc-icon-code">&#xe640;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-form"></i><div class="doc-icon-code">&#xe63c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-cellphone-fine"></i><div class="doc-icon-code">&#xe63b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-dialogue"></i><div class="doc-icon-code">&#xe63a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-fonts-clear"></i><div class="doc-icon-code">&#xe639;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-layer"></i><div class="doc-icon-code">&#xe638;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-date"></i><div class="doc-icon-code">&#xe637;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-water"></i><div class="doc-icon-code">&#xe636;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-code-circle"></i><div class="doc-icon-code">&#xe635;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-carousel"></i><div class="doc-icon-code">&#xe634;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-prev-circle"></i><div class="doc-icon-code">&#xe633;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-layouts"></i><div class="doc-icon-code">&#xe632;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-util"></i><div class="doc-icon-code">&#xe631;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-templeate-1"></i><div class="doc-icon-code">&#xe630;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-upload-circle"></i><div class="doc-icon-code">&#xe62f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-tree"></i><div class="doc-icon-code">&#xe62e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-table"></i><div class="doc-icon-code">&#xe62d;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-chart"></i><div class="doc-icon-code">&#xe62c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-chart-screen"></i><div class="doc-icon-code">&#xe629;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-engine"></i><div class="doc-icon-code">&#xe628;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-triangle-d"></i><div class="doc-icon-code">&#xe625;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-triangle-r"></i><div class="doc-icon-code">&#xe623;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-file"></i><div class="doc-icon-code">&#xe621;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-set-sm"></i><div class="doc-icon-code">&#xe620;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-add-circle"></i><div class="doc-icon-code">&#xe61f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-404"></i><div class="doc-icon-code">&#xe61c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-about"></i><div class="doc-icon-code">&#xe60b;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-up"></i><div class="doc-icon-code">&#xe619;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-down"></i><div class="doc-icon-code">&#xe61a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-left"></i><div class="doc-icon-code">&#xe603;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-right"></i><div class="doc-icon-code">&#xe602;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-circle-dot"></i><div class="doc-icon-code">&#xe617;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-search"></i><div class="doc-icon-code">&#xe615;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-set-fill"></i><div class="doc-icon-code">&#xe614;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-group"></i><div class="doc-icon-code">&#xe613;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-friends"></i><div class="doc-icon-code">&#xe612;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-reply-fill"></i><div class="doc-icon-code">&#xe611;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-menu-fill"></i><div class="doc-icon-code">&#xe60f;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-log"></i><div class="doc-icon-code">&#xe60e;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-picture-fine"></i><div class="doc-icon-code">&#xe60d;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-face-smile-fine"></i><div class="doc-icon-code">&#xe60c;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-list"></i><div class="doc-icon-code">&#xe60a;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-release"></i><div class="doc-icon-code">&#xe609;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-ok"></i><div class="doc-icon-code">&#xe605;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-help"></i><div class="doc-icon-code">&#xe607;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-chat"></i><div class="doc-icon-code">&#xe606;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-top"></i><div class="doc-icon-code">&#xe604;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-star"></i><div class="doc-icon-code">&#xe600;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-star-fill"></i><div class="doc-icon-code">&#xe658;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-close-fill"></i><div class="doc-icon-code">&#x1007;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-close"></i><div class="doc-icon-code">&#x1006;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-ok-circle"></i><div class="doc-icon-code">&#x1005;</div></li>
|
||||
<li class='layui-col-xs4 layui-col-sm3 layui-col-md2 layui-col-lg1 '><i class="layui-icon layui-icon-add-circle-fine"></i><div class="doc-icon-code">&#xe608;</div></li>
|
||||
</ul>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
layui.use(['form', 'layer', 'jquery'], function () {
|
||||
var form = layui.form,
|
||||
layer = parent.layer === undefined ? layui.layer : top.layer,
|
||||
element = layui.element;
|
||||
$ = layui.jquery;
|
||||
|
||||
/**
|
||||
* 复制图标编码至粘贴板
|
||||
*/
|
||||
$("body").on("click",".icons li",function(){
|
||||
var copyText = document.getElementById("copyText");
|
||||
copyText.innerText = $(this).html();
|
||||
copyText.select();
|
||||
document.execCommand("copy");
|
||||
window.sessionStorage.setItem("icon",$(this).text());
|
||||
var selectIcon = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(selectIcon);
|
||||
})
|
||||
})
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
59924c0d-7dc1-4d19-b04f-1625973c2510
|
||||
@@ -0,0 +1,47 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/index.css" media="all" />
|
||||
{/block}
|
||||
|
||||
{block name="cotent"}
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
{include file="admin@public/header" /}
|
||||
{include file="admin@public/menu" /}
|
||||
<!-- 右侧内容 -->
|
||||
<div class="layui-body layui-form">
|
||||
<div class="layui-tab mag0" lay-filter="bodyTab" id="top_tabs_box">
|
||||
<ul class="layui-tab-title top_tab" id="top_tabs">
|
||||
<li class="layui-this" lay-id=""><i class="layui-icon">{$home.icon|raw|default=''}</i> <cite>{$home.title|default=''}</cite></li>
|
||||
</ul>
|
||||
<ul class="layui-nav closeBox">
|
||||
<li class="layui-nav-item">
|
||||
<a href="javascript:;"><i class="layui-icon caozuo"></i> 页面操作</a>
|
||||
<dl class="layui-nav-child">
|
||||
<!--<dd><a href="javascript:;" class="refresh refreshThis"><i class="layui-icon"></i> 刷新当前</a></dd>-->
|
||||
<dd><a href="javascript:;" class="closePageOther"><i class="seraph icon-prohibit"></i> 关闭其他</a></dd>
|
||||
<dd><a href="javascript:;" class="closePageAll"><i class="seraph icon-guanbi"></i> 关闭全部</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content clildFrame">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<iframe src="{$home.href|default=''}"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include file="admin@public/footer" /}
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 移动导航 -->
|
||||
<div class="site-tree-mobile layui-hide"><i class="layui-icon"></i></div>
|
||||
<div class="site-mobile-shade" ></div>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script type="text/javascript" src="__STATIC__/js/admin/index.js"></script>
|
||||
<script type="text/javascript" src="__STATIC__/js/admin/cache.js"></script>
|
||||
{/block}
|
||||
@@ -0,0 +1,30 @@
|
||||
{extend name="admin@public/basic" /}
|
||||
|
||||
{block name="style"}
|
||||
<link rel="stylesheet" href="__STATIC__/css/admin/login.css" media="all">
|
||||
<style>
|
||||
.layadmin-backlog-body p em {
|
||||
font-style: normal;
|
||||
font-size: 30px;
|
||||
font-weight: 300;
|
||||
color: #009688 !important;
|
||||
}
|
||||
|
||||
.layadmin-backlog-body cite {
|
||||
padding-bottom: 10px;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
{/block}
|
||||
{block name="cotent"}
|
||||
<body style="background-color: #f2f2f2;">
|
||||
<div class="layui-fluid">
|
||||
<div style="font-size:30px;">欢迎使用聚志愿后台管理系统</div>
|
||||
</div>
|
||||
</body>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
{/block}
|
||||
@@ -0,0 +1 @@
|
||||
a766b3d5-5347-4a29-92d5-c870e7319cbc
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user