first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

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

View File

@@ -0,0 +1 @@
5c07980c-2e8b-4da1-8431-2ace6ab55cc2

View File

@@ -0,0 +1 @@
e588f057-12f7-4992-a56b-0257537f983f

View 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 .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;├ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
}
return $prefix . $var;
}
}

View File

@@ -0,0 +1 @@
090fb2ac-13d8-44d6-9c0b-25b80b00af7d

View File

@@ -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'])));
}
}
}

View 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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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'));
}
}

View 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('数据有误,请刷新重试!');
}
}
}

View File

@@ -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('数据有误,请刷新重试!');
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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']);
}
}
}
}

View 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;
}
}
}

View 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);
}
}
}

View File

@@ -0,0 +1 @@
44e9deb2-eea3-4463-8100-5169958e89b1

View File

@@ -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('缓存刷新失败!');
}
}
}

View File

@@ -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;
}
}

View File

@@ -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 . '】';
}
}

View File

@@ -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]);
}
}

View File

@@ -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 {
}

View File

@@ -0,0 +1 @@
abd2f604-0e26-4a3e-ae75-60639c9df448

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1 @@
69df9137-96a1-4de5-a0ee-79d0e3e649fd

View File

@@ -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);
}
}

View File

@@ -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]);
}
}

View File

@@ -0,0 +1 @@
4bd183af-4f0c-4a12-9e0b-6a6be05cb63e

View File

@@ -0,0 +1,11 @@
<?php
/*
* 文章模型
* */
namespace app\admin\model;
class Article {
}

View 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('数据没有修改!');
}
}
}

View File

@@ -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('保存失败');
}
}

View File

@@ -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('数据没有修改!');
}
}
}

View 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('数据没有修改!');
}
}
}

View 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;
}
}

View 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,
];
}
}

View 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;
}
}

View File

@@ -0,0 +1 @@
a1519cd4-363d-4c2a-87f6-0e9a0023bd99

View File

@@ -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('回复成功');
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1 @@
1869b3c6-ad2e-4621-aeea-d2243390b75f

View File

@@ -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), '/'));
}
}

View File

@@ -0,0 +1,17 @@
<?php
/**
* 验证码服务类
* Class CodeService
* @package app\admin\service
*/
namespace app\admin\service;
class CodeService {
public static function validate() {
}
}

View File

@@ -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);
}
}

View File

@@ -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' => '邮箱发送成功!'];
}
}
}
}

View File

@@ -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('删除失败,请检查!');
}
}

View File

@@ -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' => '无失效节点!'];
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,21 @@
<?php
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => [],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];

View File

@@ -0,0 +1 @@
37fbe7a9-70d7-4042-8f14-2d23774bee5e

View File

@@ -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;
}
}

View File

@@ -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'],
];
}

View File

@@ -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;
}
}

View File

@@ -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'],
];
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View 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 : '已有相同邮箱,请更换进行注册!';
}
}

View File

@@ -0,0 +1 @@
c680dcfe-9dbd-441e-b1b2-418eecefa5dd

View File

@@ -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'],
];
}

View File

@@ -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']
];
}

View File

@@ -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'],
];
}

View File

@@ -0,0 +1 @@
a07dda94-8d69-4b80-95dc-fa4b03c3bff4

View File

@@ -0,0 +1 @@
64ec7537-7e26-4b75-9eed-3c7f9429a7fa

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -0,0 +1 @@
62a2bb75-3d37-42b5-9225-578334abf58f

View File

@@ -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}

View File

@@ -0,0 +1 @@
5fbf78c3-8f20-4a2a-a835-665bcbbe1cac

View File

@@ -0,0 +1 @@
6e5d5f40-ba96-41b6-9534-423eabfbbf03

View File

@@ -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}

View File

@@ -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}

View File

@@ -0,0 +1 @@
2c14bef3-a0c4-4e0e-996a-ac6b1b104498

View File

@@ -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}

View File

@@ -0,0 +1 @@
3e12f413-d76d-4196-a193-03ac1cb602ca

View File

@@ -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}

View File

@@ -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}

View File

@@ -0,0 +1 @@
7ea1ae97-7216-43e8-929c-40c53b51ddc4

View File

@@ -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}

View File

@@ -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}

View File

@@ -0,0 +1 @@
9d762c35-05b2-4218-a300-4a5945fda3fa

View 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}

View File

@@ -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" >&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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">&amp;#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}

View File

@@ -0,0 +1 @@
59924c0d-7dc1-4d19-b04f-1625973c2510

View File

@@ -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">&#xe643;</i> 页面操作</a>
<dl class="layui-nav-child">
<!--<dd><a href="javascript:;" class="refresh refreshThis"><i class="layui-icon">&#xe9aa;</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">&#xe602;</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}

View File

@@ -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}

View File

@@ -0,0 +1 @@
a766b3d5-5347-4a29-92d5-c870e7319cbc

View File

@@ -0,0 +1,89 @@
{extend name="admin@public/basic" /}
{block name="style"}
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="__STATIC__/css/admin/login.css" media="all">
</head>
{/block}
{block name="cotent"}
<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
<div class="layadmin-user-login-main">
<div class="layadmin-user-login-box layadmin-user-login-header">
<h2>{$SysInfo.ManageName|default=''}</h2>
</div>
<div class="layadmin-user-login-box layadmin-user-login-body layui-form">
<div class="layui-form-item">
<label class="layadmin-user-login-icon layui-icon layui-icon-username" for="LAY-user-login-username"></label>
<input type="text" id="username" id="LAY-user-login-username" lay-verify="required" placeholder="用户名" class="layui-input">
</div>
<div class="layui-form-item">
<label class="layadmin-user-login-icon layui-icon layui-icon-password" for="LAY-user-login-password"></label>
<input type="password" id="password" id="LAY-user-login-password" lay-verify="required" placeholder="密码" class="layui-input">
</div>
<!--判断是否开启验证码登录-->
<!--{if $SysInfo.VercodeType == 1}-->
<div class="layui-form-item">
<div class="layui-row">
<div class="layui-col-xs7">
<label class="layadmin-user-login-icon layui-icon layui-icon-vercode" for="LAY-user-login-vercode"></label>
<input type="text" id="vercode" name="vercode" id="LAY-user-login-vercode" placeholder="图形验证码" class="layui-input">
</div>
<div class="layui-col-xs5">
<div style="margin-left: 10px;">
<img src="{:captcha_src()}" onclick="this.src='{:captcha_src()}?seed='+Math.random()" class="layadmin-user-login-codeimg" lay-submit lay-filter="LAY-user-get-vercode">
</div>
</div>
</div>
</div>
<!--{/if}-->
<div class="layui-form-item" style="margin-bottom: 20px;">
<input type="checkbox" name="remember" lay-skin="primary" title="记住密码">
<a href="#" class="layadmin-user-jump-change layadmin-link" style="margin-top: 7px;">忘记密码?</a>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" id="submitBtn">登 入</button>
</div>
</div>
</div>
<div class="layui-trans layadmin-user-login-footer">
<p>{$SysInfo.FooterName|default=''}</p>
<p>
</p>
</div>
</div>
{/block}
{block name="script"}
<script>
/**
* 跳出ifram框架
*/
if (top.location != self.location) top.location = self.location;
/**
* 登录
*/
$("#submitBtn").click(function () {
var data = {
username: $("#username").val(),
password: $("#password").val(),
vercode: $("#vercode").val(),
};
$.request.post("{:url('@admin/login')}", data, function (res) {
$.msg.success(res.msg, function () {
window.location.href = "{:url('@admin/index')}";
})
});
return false;
});
</script>
{/block}

View File

@@ -0,0 +1 @@
8caa2c55-e21f-4d9f-a236-44d72af0f6fa

View File

@@ -0,0 +1,132 @@
{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">
<select id="pid" class="pid" lay-filter="pid">
{foreach up_menu as $vo }
{eq name='$vo.id' value='$menu.pid|default=0'}
<option selected value="{$vo.id|default=''}">{$vo.title|raw|default=''}</option>
{else}
<option value="{$vo.id|default=''}">{$vo.title|raw|default=''}</option>
{/eq}
{/foreach}
</select>
</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="title" class="layui-input" lay-verify="title" lay-verify="required" value="{$menu.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">
<input type="text" id="href" class="layui-input" lay-verify="href" value="{$menu.href|default='#'}" placeholder="请输入菜单链接">
</div>
</div>
<div class="layui-form-item layui-row">
<div class="magb15 layui-col-md4 layui-col-xs12">
<label class="layui-form-label">图标编码</label>
<div class="layui-input-block">
<input type="text" id="icon" class="layui-input" lay-verify="icon" value="{$menu.icon|default=''}" placeholder="请输入图标编码">
</div>
</div>
<div class="magb15 layui-col-md4 layui-col-xs12">
<label class="layui-form-label">图标样式</label>
<span class='layui-btn layui-btn-primary' style='padding:0 12px;min-width:45px'>
{if isset($menu.icon_type) && $menu.icon_type=='fa'}
<i id='icon-preview' class="fa {$menu.icon|raw|default=''}"></i>
{else/}
<i id='icon-preview' class="layui-icon " data-icon="{$menu.icon|raw|default=''}">{$menu.icon|raw|default=''}</i>
{/if}
</span>
<button data-icon='icon' type='button' class='layui-btn layui-btn-primary select_icon'>选择图标</button>
</div>
<div class="magb15 layui-col-md4 layui-col-xs12">
<label class="layui-form-label">菜单排序</label>
<div class="layui-input-block">
<input type="text" id="sort" class="layui-input" lay-verify="sort" value="{$menu.sort|default='0'}" placeholder="请输入排序">
</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="remark" placeholder="请输入备注信息" class="layui-textarea">{$menu.remark|default=''}</textarea>
</div>
</div>
{if !empty($menu)}
<input type="hidden" class="id" id="id" value="{$menu.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($menu.id)}{:url('@admin/menu/add')}{else/}{:url('@admin/menu/edit')}{/if}";
var data = {
id: $("#id").val(),
pid: $("#pid").val(),
title: $("#title").val(),
href: $("#href").val(),
icon: $("#icon").val(),
sort: $("#sort").val(),
remark: $("#remark").val(),
};
$.request.post(url, data, function (res) {
$.msg.success(res.msg, function () {
$.tool.reload('open');
})
})
return false;
});
/**
* 选择图标并且自动填充
*/
$(".select_icon").click(function () {
var selectIcon = layer.open({
title: "选择图标",
type: 2,
area: ['1000px', '600px'],
content: "{:url('@admin/tool.icon/fa')}",
success: function (layero, selectIcon) {
var body = layer.getChildFrame('body', selectIcon);
},
end: function () {
var icon = window.sessionStorage.getItem("icon");
$('#icon').attr('value', icon);
$('#icon-preview').attr('data-icon', icon);
$('#icon-preview').attr('class', 'fa ' + icon);
// $("#icon-preview").html(icon);
window.sessionStorage.removeItem("icon");
}
})
return false;
})
</script>
{/block}

View File

@@ -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">
<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" 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="href" class="layui-input href" 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="create_at" class="layui-input" id="create_at" 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/add")}
{{# if (d.is_add) { }}
<a class="layui-btn layui-btn-xs" value="{{d.id}}" data-open='{:url("$thisClass/add")}?pid={{d.id}}' data-title="添加菜单">添加下级</a>
{{# } else { }}
<a class="layui-btn layui-btn-xs color-99admin-gray" value="{{d.id}}">添加下级</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"},
{
field: 'icon', title: '图标', width: 100, align: 'center', templet: function (d) {
/**判断图标类型layuicms自带、fa图标、layui图标**/
if (d.icon.indexOf("icon-") != -1) {
return '<span class="seraph ' + d.icon + '" data-icon="' + d.icon + '"></span>';
} else if (d.icon.indexOf("fa-") != -1) {
return '<span class="fa ' + d.icon + '" data-icon="' + d.icon + '"></span>';
} else {
return '<span class="layui-icon">' + d.icon + '</span>';
}
}
},
{field: 'title', title: '菜单名称', minWidth: 200, align: 'left'},
{
field: 'href', title: '链接地址', minWidth: 300, align: 'center', templet: function (d) {
return '<a class="layui-blue" href="/' + d.href + '" target="_blank">' + d.href + '</a>';
}
},
{field: 'status', title: '启用状态', minWidth: 110, templet: '#checkStatus', unresize: true, align: "center"},
/**{if auth("$thisClass/add") || auth("$thisClass/edit") || auth("$thisClass/del")}**/
{title: '操作', minWidth: 110, templet: '#currentTableBar', fixed: "right", align: "center"},
/**{/if}**/
]], false);
/**
* 日期范围
*/
$.laydate.range('create_at');
/**
* 监听字段值编辑
*/
$.form.editField('currentTable', '{:url("$thisRequest")}');
/**
* 修改状态
*/
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
</script>
{/block}

View File

@@ -0,0 +1 @@
e25faa86-0247-4cc8-a46f-bc0c35a791b2

View File

@@ -0,0 +1,100 @@
{extend name="admin@public/basic" /}
{block name="style"}
<link rel="stylesheet" href="__STATIC__/css/admin/public.css" media="all"/>
{/block}
{block name="cotent"}
{if empty($module_list)}
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
<legend>暂无节点信息,可以先刷新节点信息 =》
<button class="layui-btn layui-btn-normal refresh_node">刷新节点</button>
</legend>
</fieldset>
{/if}
<div class="layui-tab layui-tab-brief" lay-filter="module">
<ul class="layui-tab-title">
{foreach module_list as $vo}
<li {if $vo.is_selectd==true}class="layui-this"{/if} lay-id="{$vo.id}">{$vo.title|default=''}【{$vo.node|default=''}】</li>
{/foreach}
</ul>
<div class="layui-tab-content">
{foreach module_list as $vo}
<div class="layui-tab-item {if $vo.is_selectd==true}layui-show{/if}">
<table id="{$vo.node}Table" lay-filter="{$vo.node}Table"></table>
<script type="text/html" id="checkStatus">
<input type="checkbox" name="{{d.id}}" value="{{d.is_auth}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="modifyStatus" {{ d.is_auth== 1 ? 'checked' : '' }}>
</script>
</div>
{/foreach}
</div>
</div>
{/block}
{block name="script"}
<script>
layui.use(['laydate', 'form', 'layer', 'table', 'laytpl', 'element'], function () {
var form = layui.form,
layer = parent.layer === undefined ? layui.layer : top.layer,
$ = layui.jquery,
laytpl = layui.laytpl,
table = layui.table,
laydate = layui.laydate,
element = layui.element;
/**{foreach module_list as $vo}**/
$.form.table("{$vo.node}", '{:url("$thisRequest")}?module={$vo.node}', [[
{field: 'node', title: '系统节点', minWidth: 200, align: 'left', sort: true},
{field: 'title', title: '节点名称', edit: 'text', minWidth: 200, align: "center", style: 'background-color: #009688; color: #fff;', sort: true},
{field: 'create_at', title: '创建时间', align: 'center', sort: true},
{field: 'is_auth', title: '节点控制', width: 150, templet: '#checkStatus', unresize: true, align: "center"},
]], false);
/**{/foreach}**/
//Hash地址的定位
var layid = location.hash.replace(/^#module=/, '');
element.tabChange('module', layid);
element.on('tab(module)', function (elem) {
location.hash = 'module=' + $(this).attr('lay-id');
});
/**
* 修改状态
*/
$.form.switch('modifyStatus', '{:url("$thisClass/status")}');
/**
* 监听字段值编辑
*/
/**{foreach module_list as $vo}**/
$.form.editField("{$vo.node}Table", '{:url("$thisRequest")}');
/**{/foreach}**/
/**
* 工具栏操作
*/
/**{foreach module_list as $vo}**/
table.on("tool({$vo.node}Table)", function (obj) {
var layEvent = obj.event,
data = obj.data;
//删除
if (layEvent === 'delBtn') {
$.msg.confirm('确定删除?', function () {
$.request.post('{:url("$thisClass/del")}', {id: data.id}, function (res) {
$.msg.success(res.msg, function () {
$.tool.reload();
});
});
});
return false;
}
});
/**{/foreach}**/
});
</script>
{/block}

Some files were not shown because too many files have changed in this diff Show More