勾股CMS2.0版本,重构了系统菜单功能模块、权限模块,新增商品功能,以及其他功能模块的优化。

This commit is contained in:
hdm 2022-02-16 14:50:12 +08:00
parent 570a3cc241
commit 2ca5deed55
125 changed files with 23791 additions and 2507 deletions

View File

@ -1,7 +1,7 @@
# 勾股CMS
# 勾股CMS2.0
[![勾股CMS](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://gitee.com/gougucms/gougucms/)
[![勾股CMS](https://img.shields.io/badge/GouguCMS-1.0.0-brightgreen.svg)](https://gitee.com/gougucms/gougucms/)
[![勾股CMS](https://img.shields.io/badge/GouguCMS-2.0.11-brightgreen.svg)](https://gitee.com/gougucms/gougucms/)
[![star](https://gitee.com/gougucms/gougucms/badge/star.svg?theme=dark)](https://gitee.com/gougucms/gougucms/stargazers)
[![fork](https://gitee.com/gougucms/gougucms/badge/fork.svg?theme=dark)](https://gitee.com/gougucms/gougucms/members)
@ -12,9 +12,12 @@
- 项目会不定时进行更新建议⭐star⭐和👁watch👁一份。
- 后台体验地址:[https://www.gougucms.com/admin/index/index.html](https://www.gougucms.com/admin/index/index.html)
- 后台体验账号gougucms 密码gougucms
### 开源项目
1. [![勾股OA](https://img.shields.io/badge/GouguOA-2.0.9-brightgreen.svg)](https://gitee.com/gougucms/office) [开源项目系列之勾股OA](https://gitee.com/gougucms/office)
2. [![勾股CMS](https://img.shields.io/badge/GouguCMS-1.9.6-brightgreen.svg)](https://gitee.com/gougucms/gougucms) [开源项目系列之勾股CMS](https://gitee.com/gougucms/gougucms)
2. [![勾股CMS](https://img.shields.io/badge/GouguCMS-2.0.11-brightgreen.svg)](https://gitee.com/gougucms/gougucms) [开源项目系列之勾股CMS](https://gitee.com/gougucms/gougucms)
3. [![勾股BLOG](https://img.shields.io/badge/GouguBLOG-1.5.8-brightgreen.svg)](https://gitee.com/gougucms/blog) [开源项目系列之勾股BLOG](https://gitee.com/gougucms/blog)
### 介绍
@ -89,7 +92,7 @@ www 系统部署目录(或者子目录)
### 功能矩阵
系统后台集成了主流的通用功能登录验证、系统配置、操作日志管理、用户管理、用户权限、功能管理后台菜单管理、导航设置、网站地图、轮播广告、TAG关键字管理、文件上传、数据备份/还原、文章功能、用户管理、用户操作日志、用户注册/登录、 API接口等。更多的个性化功能可以基于当前系统便捷做二次开发。
系统后台集成了主流的通用功能登录验证、系统配置、操作日志管理、用户管理、用户权限、功能管理后台菜单管理、导航设置、网站地图、轮播广告、TAG关键字管理、文件上传、数据备份/还原、文章功能、商品功能、用户管理、用户操作日志、用户注册/登录、 API接口等。更多的个性化功能可以基于当前系统便捷做二次开发。
具体功能如下:
@ -123,6 +126,10 @@ www 系统部署目录(或者子目录)
│ ├─文章分类
│ ├─文章列表
├─商品中心
│ ├─商品分类
│ ├─商品列表
├─...
~~~

View File

@ -4,8 +4,11 @@
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
// admin模块公共文件
// 应用公共文件,内置主要的数据处理方法
use think\facade\Config;
use think\facade\Request;
use think\facade\Cache;
use think\facade\Db;
//获取后台模块当前登录用户的信息
function get_login_admin($key = "")
{
@ -109,102 +112,107 @@ function create_tree_list($pid, $arr, $group, &$tree = [])
return $tree;
}
//递归排序
function set_recursion($result, $pid = 0, $format = "L ")
//递归排序,用于分类选择
function set_recursion($result, $pid = 0, $level=-1)
{
/*记录排序后的类别数组*/
static $list = array();
static $space = ['','├─','§§├─','§§§§├─','§§§§§§├─'];
$level++;
foreach ($result as $k => $v) {
if ($v['pid'] == $pid) {
if ($pid != 0) {
$v['title'] = $format . $v['title'];
$v['title'] = $space[$level] . $v['title'];
}
/*将该类别的数据放入list中*/
$list[] = $v;
set_recursion($result, $v['id'], " " . $format);
set_recursion($result, $v['id'],$level);
}
}
return $list;
}
/**
* 根据id递归返回子数据
* @param $data 数据
* @param $pid 父节点id
*/
function get_data_node($data=[],$pid=0){
$dep = [];
foreach($data as $k => $v){
if($v['pid'] == $pid){
$node=get_data_node($data, $v['id']);
array_push($dep,$v);
if(!empty($node)){
$dep=array_merge($dep,$node);
}
}
}
return array_values($dep);
}
//获取指定管理员的信息
function get_admin($id)
{
$admin = \think\facade\Db::name('Admin')->where(['id' => $id])->find();
$admin['group_id'] = \think\facade\Db::name('AdminGroupAccess')->where(['uid' => $id])->column('group_id');
$admin = Db::name('Admin')->where(['id' => $id])->find();
$admin['group_id'] = Db::name('AdminGroupAccess')->where(['uid' => $id])->column('group_id');
return $admin;
}
//读取后台菜单列表
function get_admin_menu()
{
$menu = \think\facade\Db::name('AdminMenu')->order('sort asc')->select()->toArray();
return $menu;
}
//读取权限节点列表
function get_admin_rule()
{
$rule = \think\facade\Db::name('AdminRule')->order('create_time asc')->select()->toArray();
$rule = Db::name('AdminRule')->where(['status'=>1])->order('sort asc,id asc')->select()->toArray();
return $rule;
}
//读取模块列表
function get_admin_module()
{
$group = Db::name('AdminModule')->order('id asc')->select()->toArray();
return $group;
}
//读取权限分组列表
function get_admin_group()
{
$group = \think\facade\Db::name('AdminGroup')->order('create_time asc')->select()->toArray();
$group = Db::name('AdminGroup')->order('create_time asc')->select()->toArray();
return $group;
}
//读取指定权限分组详情
function get_admin_group_info($id)
{
$group = \think\facade\Db::name('AdminGroup')->where(['id' => $id])->find();
$group['rules'] = explode(',', $group['rules']);
$group['menus'] = explode(',', $group['menus']);
return $group;
}
//菜单父子关系排序,用于后台菜单
function get_admin_menus()
{
if (get_cache('menu' . get_login_admin('id'))) {
$list = get_cache('menu' . get_login_admin('id'));
} else {
$adminGroup = \think\facade\Db::name('AdminGroupAccess')->where(['uid' => get_login_admin('id')])->column('group_id');
$adminMenu = \think\facade\Db::name('AdminGroup')->where('id', 'in', $adminGroup)->column('menus');
$adminMenus = [];
foreach ($adminMenu as $k => $v) {
$v = explode(',', $v);
$adminMenus = array_merge($adminMenus, $v);
}
$menu = \think\facade\Db::name('AdminMenu')->where('id', 'in', $adminMenus)->order('sort asc')->select()->toArray();
$list = list_to_tree($menu);
\think\facade\Cache::tag('adminMenu')->set('menu' . get_login_admin('id'), $list);
}
return $list;
$rule = Db::name('AdminGroup')->where(['id' => $id])->value('rules');
$rules = explode(',', $rule);
return $rules;
}
//读取导航列表,用于后台
function get_nav($nav_id)
{
$nav = \think\facade\Db::name('NavInfo')->where('nav_id', $nav_id)->order('sort asc')->select();
$nav = Db::name('NavInfo')->where('nav_id', $nav_id)->order('sort asc')->select();
return $nav;
}
//读取关键字列表
function get_keywords()
{
$keywords = \think\facade\Db::name('Keywords')->where(['status' => 1])->order('create_time asc')->select();
$keywords = Db::name('Keywords')->where(['status' => 1])->order('create_time asc')->select();
return $keywords;
}
//读取文章分类列表
function get_article_cate()
{
$cate = \think\facade\Db::name('ArticleCate')->order('create_time asc')->select()->toArray();
$cate = Db::name('ArticleCate')->order('create_time asc')->select()->toArray();
return $cate;
}
//读取商品分类列表
function get_goods_cate()
{
$cate = Db::name('GoodsCate')->order('create_time asc')->select()->toArray();
return $cate;
}
@ -246,35 +254,13 @@ function date_document($arrData)
*/
function add_log($type, $param_id = '', $param = [])
{
$request = get_params();
switch ($type) {
case 'login':
$title = '登录';
break;
case 'upload':
$title = '上传';
break;
case 'add':
$title = '新增';
break;
case 'edit':
$title = '编辑';
break;
case 'view':
$title = '查看';
break;
case 'delete':
$title = '删除';
break;
case 'check':
$title = '审核';
break;
default:
$title = '未知';
break;
}
$action = '未知操作';
$type_action = get_config('log.admin_action');
if($type_action[$type]){
$action = $type_action[$type];
}
if ($type == 'login') {
$login_admin = \think\facade\Db::name('Admin')->where(array('id' => $param_id))->find();
$login_admin = Db::name('Admin')->where(array('id' => $param_id))->find();
} else {
$session_admin = get_config('app.session_admin');
$login_admin = \think\facade\Session::get($session_admin);
@ -283,17 +269,25 @@ function add_log($type, $param_id = '', $param = [])
$data['uid'] = $login_admin['id'];
$data['nickname'] = $login_admin['nickname'];
$data['type'] = $type;
$data['action'] = $action;
$data['param_id'] = $param_id;
$data['param'] = json_encode($param);
$data['module'] = \think\facade\App::initialize()->http->getName();
$data['module'] = strtolower(app('http')->getName());
$data['controller'] = strtolower(app('request')->controller());
$data['function'] = app('request')->action();
$data['function'] = strtolower(app('request')->action());
$parameter = $data['module'] . '/' . $data['controller'] . '/' . $data['function'];
$data['rule_menu'] = $parameter;
$data['title'] = \think\facade\Db::name('AdminRule')->where(array('src' => $parameter))->value('title') ?? $title;
$content = $login_admin['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $data['title'] . '操作';
$rule_menu = Db::name('AdminRule')->where(array('src' => $parameter))->find();
if($rule_menu){
$data['title'] = $rule_menu['title'];
$data['subject'] = $rule_menu['name'];
}
else{
$data['title'] = '';
$data['subject'] ='系统';
}
$content = $login_admin['nickname'] . '在' . date('Y-m-d H:i:s') . $data['action'] . '了' . $data['subject'];
$data['content'] = $content;
$data['ip'] = app('request')->ip();
$data['create_time'] = time();
\think\facade\Db::name('AdminLog')->strict(false)->field(true)->insert($data);
Db::name('AdminLog')->strict(false)->field(true)->insert($data);
}

View File

@ -207,7 +207,6 @@ class Admin extends BaseController
public function view()
{
$id = get_params('id');
$menu = get_admin_menu();
$rule = get_admin_rule();
$user_groups = Db::name('AdminGroupAccess')
@ -218,19 +217,14 @@ class Admin extends BaseController
->toArray();
$groups = $user_groups ?: [];
$menus = [];
$rules = [];
foreach ($groups as $g) {
$menus = array_merge($menus, explode(',', trim($g['menus'], ',')));
$rules = array_merge($rules, explode(',', trim($g['rules'], ',')));
}
$menus = array_unique($menus);
$rules = array_unique($rules);
$role_menu = create_tree_list(0, $menu, $menus);
$role_rule = create_tree_list(0, $rule, $rules);
View::assign('role_menu', $role_menu);
View::assign('role_rule', $role_rule);
View::assign('admin', get_admin($id));
add_log('view', get_params('id'));

View File

@ -32,34 +32,42 @@ class Article extends BaseController
}
}
//获取子分类id.$is_self=1包含自己
public function get_cate_son($id = 0, $is_self = 1)
{
$cates = Db::name('ArticleCate')->order('create_time asc')->select()->toArray();
$cates_list = get_data_node($cates, $id);
$cates_array = array_column($cates_list, 'id');
if ($is_self == 1) {
//包括自己在内
$cates_array[] = $id;
}
return $cates_array;
}
//文章分类添加
public function cate_add()
{
return view('', ['pid' => get_params('pid')]);
}
//提交保存文章分类
public function cate_post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
$data[$param['field']] = $param['value'];
$data['id'] = $param['id'];
$data['update_time'] = time();
if(!empty($data['title'])){
try {
validate(ArticleCateCheck::class)->scene('edit')->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
try {
validate(ArticleCateCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
$department_array = $this->get_cate_son($param['id']);
if (in_array($param['pid'], $department_array)) {
return to_assign(1, '上级分类不能是该分类本身或其子分类');
} else {
$res = ArticleCate::strict(false)->field(true)->update($param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
}
$res = ArticleCate::strict(false)->field(true)->update($data);
if ($res) {
add_log('edit', $data['id'], $data);
}
return to_assign();
} else {
try {
validate(ArticleCateCheck::class)->scene('add')->check($param);
@ -75,6 +83,18 @@ class Article extends BaseController
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$pid = isset($param['pid']) ? $param['pid'] : 0;
if ($id > 0) {
$cate = Db::name('ArticleCate')->where(['id' => $id])->find();
$pid = $cate['pid'];
View::assign('cate', $cate);
}
View::assign('id', $id);
View::assign('pid', $pid);
return view();
}
}
//删除文章分配
@ -126,21 +146,8 @@ class Article extends BaseController
//文章添加&&编辑
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
View::assign('id', $id);
if ($id > 0) {
$article = (new ArticleList())->detail($id);
View::assign('article', $article);
return view('edit');
}
return view();
}
//文章内容提交保存
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
$DbRes=false;
if (!empty($param['id']) && $param['id'] > 0) {
try {
@ -220,6 +227,16 @@ class Article extends BaseController
return to_assign(1,'操作失败');
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
View::assign('id', $id);
if ($id > 0) {
$article = (new ArticleList())->detail($id);
View::assign('article', $article);
return view('edit');
}
return view();
}
}
//删除文章

View File

@ -33,23 +33,11 @@ class Conf extends BaseController
}
}
//添加
//添加/编辑配置项
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$config = Db::name('Config')->where(['id' => $id])->find();
View::assign('config', $config);
}
View::assign('id', $id);
return view();
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
try {
validate(ConfCheck::class)->check($param);
} catch (ValidateException $e) {
@ -62,7 +50,6 @@ class Conf extends BaseController
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
} else {
$param['create_time'] = time();
@ -70,12 +57,20 @@ class Conf extends BaseController
if ($insertId) {
add_log('add', $insertId, $param);
}
return to_assign();
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
if ($id > 0) {
$config = Db::name('Config')->where(['id' => $id])->find();
View::assign('config', $config);
}
View::assign('id', $id);
return view();
}
}
//删除
//删除配置项
public function delete()
{
$id = get_params("id");
@ -90,22 +85,11 @@ class Conf extends BaseController
}
}
//编辑配置
//编辑配置信息
public function edit()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$conf = Db::name('Config')->where('id', $id)->find();
$config = [];
if ($conf['content']) {
$config = unserialize($conf['content']);
}
return view($conf['name'], ['id' => $id, 'config' => $config]);
}
//提交添加
public function conf_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
$data['content'] = serialize($param);
$data['update_time'] = time();
$data['id'] = $param['id'];
@ -116,6 +100,16 @@ class Conf extends BaseController
add_log('edit', $param['id'], $param);
}
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$conf = Db::name('Config')->where('id', $id)->find();
$config = [];
if ($conf['content']) {
$config = unserialize($conf['content']);
}
View::assign('id', $id);
View::assign('config', $config);
return view($conf['name']);
}
}
}

View File

@ -62,7 +62,7 @@ class Database extends BaseController
add_log('add');
return to_assign(0, '备份成功!');
} else {
return to_assign(1, '请选择要备份的表');
return to_assign(1, '请选择要备份的表');
}
}
@ -71,14 +71,14 @@ class Database extends BaseController
{
$tables = get_params('id');
if (empty($tables)) {
return to_assign(0, '请选择要优化的表');
return to_assign(0, '请选择要优化的表');
}
$tables = explode(',', $tables);
if ($this->db->optimize($tables)) {
add_log('edit');
return to_assign(0, '数据表优化成功!');
} else {
return to_assign(1, '数据表优化出错请重试');
return to_assign(1, '数据表优化出错请重试');
}
}
@ -87,14 +87,14 @@ class Database extends BaseController
{
$tables = get_params('id');
if (empty($tables)) {
return to_assign(1, '请选择要修复的表');
return to_assign(1, '请选择要修复的表');
}
$tables = explode(',', $tables);
if ($this->db->repair($tables)) {
add_log('edit');
return to_assign(0, '数据表修复成功');
return to_assign(0, '数据表修复成功');
} else {
return to_assign(1, '数据表修复出错请重试');
return to_assign(1, '数据表修复出错请重试');
}
}
@ -167,13 +167,13 @@ class Database extends BaseController
$this->db->delFile($v);
}
add_log('delete');
return to_assign(0, "删除成功");
return to_assign(0, "删除成功");
}
if ($this->db->delFile($id)) {
add_log('delete');
return to_assign(0, "删除成功");
return to_assign(0, "删除成功");
} else {
return to_assign(1, "备份文件删除失败,请检查文件权限");
return to_assign(1, "备份文件删除失败,请检查文件权限");
}
}
}

View File

@ -0,0 +1,259 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
use app\admin\BaseController;
use app\admin\model\Goods as GoodsList;
use app\admin\model\GoodsCate;
use app\admin\model\Keywords;
use app\admin\validate\GoodsCateCheck;
use app\admin\validate\GoodsCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Goods extends BaseController
{
public function cate()
{
if (request()->isAjax()) {
$cate = Db::name('GoodsCate')->order('create_time asc')->select();
return to_assign(0, '', $cate);
}
else{
return view();
}
}
//获取子分类id.$is_self=1包含自己
public function get_cate_son($id = 0, $is_self = 1)
{
$cates = Db::name('GoodsCate')->order('create_time asc')->select()->toArray();
$cates_list = get_data_node($cates, $id);
$cates_array = array_column($cates_list, 'id');
if ($is_self == 1) {
//包括自己在内
$cates_array[] = $id;
}
return $cates_array;
}
//文章分类添加
public function cate_add()
{
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(GoodsCateCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
$department_array = $this->get_cate_son($param['id']);
if (in_array($param['pid'], $department_array)) {
return to_assign(1, '上级分类不能是该分类本身或其子分类');
} else {
$res = GoodsCate::strict(false)->field(true)->update($param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
}
} else {
try {
validate(GoodsCateCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$insertId = GoodsCate::strict(false)->field(true)->insertGetId($param);
if ($insertId) {
add_log('add', $insertId, $param);
}
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$pid = isset($param['pid']) ? $param['pid'] : 0;
if ($id > 0) {
$cate = Db::name('GoodsCate')->where(['id' => $id])->find();
$pid = $cate['pid'];
View::assign('cate', $cate);
}
View::assign('id', $id);
View::assign('pid', $pid);
return view();
}
}
//删除文章分配
public function cate_delete()
{
$id = get_params("id");
$cate_count = Db::name('GoodsCate')->where(["pid" => $id])->count();
if ($cate_count > 0) {
return to_assign(1, "该分类下还有子分类,无法删除");
}
$content_count = Db::name('Goods')->where(["cate_id" => $id])->count();
if ($content_count > 0) {
return to_assign(1, "该分类下还有商品,无法删除");
}
if (Db::name('GoodsCate')->delete($id) !== false) {
add_log('delete', $id);
return to_assign(0, "删除分类成功");
} else {
return to_assign(1, "删除失败");
}
}
public function index()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['a.id|a.title|a.keywords|a.desc|a.content|w.title', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['cate_id'])) {
$where[] = ['a.cate_id', '=', $param['cate_id']];
}
$where[] = ['a.status', '>=', 0];
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = GoodsList::where($where)
->field('a.*,a.id as id,w.title as cate_title,a.title as title')
->alias('a')
->join('GoodsCate w', 'a.cate_id = w.id')
->order('a.create_time desc')
->paginate($rows, false, ['query' => $param]);
return table_assign(0, '', $content);
}
else{
return view();
}
}
//文章添加&&编辑
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$DbRes=false;
if (isset($param['tag_values']) && $param['tag_values']) {
$param['tag_values'] = implode(',',$param['tag_values']);
}
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(GoodsCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
Db::startTrans();
try {
$res = GoodsList::strict(false)->field(true)->update($param);
$aid = $param['id'];
if ($res) {
//关联角色
if (isset($param['keyword_names']) && $param['keyword_names']) {
Db::name('GoodsKeywords')->where(['aid'=>$aid])->delete();
$keywordArray = explode(',', $param['keyword_names']);
$res_keyword = (new GoodsList())->insertKeyword($keywordArray,$aid);
}
else{
$res_keyword == true;
}
if($res_keyword!== false){
add_log('edit', $param['id'], $param);
Db::commit();
$DbRes=true;
}
} else {
Db::rollback();
}
}
catch (\Exception $e) { ##这里参数不能删除($e错误信息)
Db::rollback();
}
} else {
try {
validate(GoodsCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
Db::startTrans();
try {
if(empty($param['desc'])){
$param['desc'] = getDescriptionFromContent($param['content'], 100);
}
$aid = GoodsList::strict(false)->field(true)->insertGetId($param);
if ($aid) {
//关联角色
if (isset($param['keyword_names']) && $param['keyword_names']) {
Db::name('GoodsKeywords')->where(['aid'=>$aid])->delete();
$keywordArray = explode(',', $param['keyword_names']);
$res_keyword = (new GoodsList())->insertKeyword($keywordArray,$aid);
}
else{
$res_keyword == true;
}
if($res_keyword!== false){
add_log('add', $aid, $param);
Db::commit();
$DbRes=true;
}
} else {
Db::rollback();
}
}
catch (\Exception $e) { ##这里参数不能删除($e错误信息)
Db::rollback();
}
}
if($DbRes){
return to_assign();
}
else{
return to_assign(1,'操作失败');
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
View::assign('id', $id);
if ($id > 0) {
$goods = (new GoodsList())->detail($id);
View::assign('goods', $goods);
return view('edit');
}
return view();
}
}
//删除文章
public function delete()
{
$id = get_params("id");
$data['status'] = '-1';
$data['id'] = $id;
$data['update_time'] = time();
if (Db::name('Goods')->update($data) !== false) {
add_log('delete', $id);
return to_assign(0, "删除成功");
} else {
return to_assign(1, "删除失败");
}
}
}

View File

@ -17,8 +17,22 @@ class Index extends BaseController
{
public function index()
{
$menu = get_admin_menus();
View::assign('menu', $menu);
$admin = get_login_admin();
if (get_cache('menu' . $admin['id'])) {
$list = get_cache('menu' . $admin['id']);
} else {
$adminGroup = Db::name('AdminGroupAccess')->where(['uid' => get_login_admin('id')])->column('group_id');
$adminMenu = Db::name('AdminGroup')->where('id', 'in', $adminGroup)->column('rules');
$adminMenus = [];
foreach ($adminMenu as $k => $v) {
$v = explode(',', $v);
$adminMenus = array_merge($adminMenus, $v);
}
$menu = Db::name('AdminRule')->where(['menu' => 1,'status'=>1])->where('id', 'in', $adminMenus)->order('sort asc')->select()->toArray();
$list = list_to_tree($menu);
\think\facade\Cache::tag('adminMenu')->set('menu' . $admin['id'], $list);
}
View::assign('menu', $list);
return View();
}

View File

@ -40,20 +40,8 @@ class Keywords extends BaseController
//添加
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$keywords = Db::name('Keywords')->where(['id' => $id])->find();
View::assign('keywords', $keywords);
}
View::assign('id', $id);
return view();
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(KeywordsCheck::class)->scene('edit')->check($param);
@ -84,7 +72,17 @@ class Keywords extends BaseController
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id > 0) {
$keywords = Db::name('Keywords')->where(['id' => $id])->find();
View::assign('keywords', $keywords);
}
View::assign('id', $id);
return view();
}
}
//删除
public function delete()
{

View File

@ -0,0 +1,95 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
use app\admin\BaseController;
use app\admin\validate\LevelCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Level extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$level = Db::name('UserLevel')->select();
return to_assign(0, '', $level);
} else {
return view();
}
}
//添加新增/编辑
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['title'] = preg_replace('# #','',$param['title']);
if ($param['id'] > 0) {
try {
validate(LevelCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
Db::name('UserLevel')->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} else {
try {
validate(LevelCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$mid = Db::name('UserLevel')->strict(false)->field(true)->insertGetId($param);
add_log('add', $mid, $param);
}
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
if($id>0){
$detail = Db::name('UserLevel')->where('id',$id)->find();
View::assign('detail', $detail);
}
View::assign('id', $id);
return view();
}
}
//禁用/启用
public function disable()
{
$param = get_params();
$module = Db::name('AdminModule')->where('id',$param['id'])->find();
if($module['type'] == 1){
return to_assign(1,'系统模块不能禁用');
}
$param['update_time']= time();
$res = Db::name('AdminModule')->strict(false)->field('status,update_time')->update($param);
if($res!==false){
Db::name('AdminRule')->strict(false)->where('module',$module['name'])->field('status')->update(['status'=>$param['status']]);
// 删除后台节点缓存
clear_cache('adminRules');
if($param['status'] == 0){
add_log('disable', $param['id'], $param);
}
else if($param['status'] == 1){
add_log('recovery', $param['id'], $param);
}
return to_assign();
}
else{
return to_assign(1,'操作失败');
}
}
}

View File

@ -0,0 +1,62 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
use app\admin\BaseController;
use think\facade\Db;
use think\facade\View;
class Log extends BaseController
{
//管理员操作日志
public function index()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['nickname|content|param_id', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['action'])) {
$where['action'] = $param['action'];
}
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
$content = DB::name('AdminLog')
->field("id,uid,nickname,action,title,content,rule_menu,ip,param_id,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
$content->toArray();
foreach ($content as $k => $v) {
$data = $v;
$param_array = json_decode($v['param'], true);
if(is_array($param_array)){
$param_value = '';
foreach ($param_array as $key => $value) {
if (is_array($value)) {
$value = implode(',', $value);
}
$param_value .= $key . ':' . $value . '&nbsp;&nbsp;|&nbsp;&nbsp;';
}
$data['param'] = $param_value;
}
else{
$data['param'] = $param_array;
}
$content->offsetSet($k, $data);
}
return table_assign(0, '', $content);
} else {
$type_action = get_config('log.admin_action');
View::assign('type_action', $type_action);
return view();
}
}
}

View File

@ -1,97 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
use app\admin\BaseController;
use app\admin\validate\MenuCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Menu extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$menu = Db::name('AdminMenu')->order('sort asc')->select();
return to_assign(0, '', $menu);
} else {
return view();
}
}
//添加菜单页面
public function add()
{
return view('', ['pid' => get_params('pid')]);
}
//提交添加
public function post_submit()
{
if (request()->isAjax()) {
$param = get_params();
if ($param['id'] > 0) {
$data[$param['field']] = $param['value'];
$data['id'] = $param['id'];
if(!empty($data['title'])){
try {
validate(MenuCheck::class)->scene('edit')->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
}
Db::name('AdminMenu')->strict(false)->field(true)->update($data);
add_log('edit', $param['id'], $data);
} else {
try {
validate(MenuCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$mid = Db::name('AdminMenu')->strict(false)->field(true)->insertGetId($param);
//自动为系统所有者管理组分配新增的菜单
$group = Db::name('AdminGroup')->find(1);
if (!empty($group)) {
$newGroup['id'] = 1;
$newGroup['menus'] = $group['menus'] . ',' . $mid;
Db::name('AdminGroup')->strict(false)->field(true)->update($newGroup);
add_log('add', $mid, $param);
}
}
// 删除后台菜单缓存
clear_cache('adminMenu');
return to_assign();
}
}
//删除
public function delete()
{
$id = get_params('id');
$count = Db::name('AdminMenu')->where(['pid' => $id])->count();
if ($count > 0) {
return to_assign(1, '该菜单下还有子菜单,无法删除');
}
if (Db::name('AdminMenu')->delete($id) !== false) {
// 删除后台菜单缓存
clear_cache('adminMenu');
add_log('delete', $id, []);
return to_assign(0, '删除菜单成功');
} else {
return to_assign(1, '删除失败');
}
}
}

View File

@ -0,0 +1,99 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\admin\controller;
use app\admin\BaseController;
use app\admin\validate\ModuleCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Module extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$module = Db::name('AdminModule')->select();
return to_assign(0, '', $module);
} else {
return view();
}
}
//添加新增/编辑
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['name'] = preg_replace('# #','',$param['name']);
if ($param['id'] > 0) {
$module = Db::name('AdminModule')->where('id',$param['id'])->find();
if($module['type'] == 1){
return to_assign(1,'系统默认模块不能编辑');
}
try {
validate(ModuleCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
Db::name('AdminModule')->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} else {
try {
validate(ModuleCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$mid = Db::name('AdminModule')->strict(false)->field(true)->insertGetId($param);
add_log('add', $mid, $param);
}
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
if($id>0){
$detail = Db::name('AdminModule')->where('id',$id)->find();
View::assign('detail', $detail);
}
View::assign('id', $id);
return view();
}
}
//禁用/启用
public function disable()
{
$param = get_params();
$module = Db::name('AdminModule')->where('id',$param['id'])->find();
if($module['type'] == 1){
return to_assign(1,'系统模块不能禁用');
}
$param['update_time']= time();
$res = Db::name('AdminModule')->strict(false)->field('status,update_time')->update($param);
if($res!==false){
Db::name('AdminRule')->strict(false)->where('module',$module['name'])->field('status')->update(['status'=>$param['status']]);
// 删除后台节点缓存
clear_cache('adminRules');
if($param['status'] == 0){
add_log('disable', $param['id'], $param);
}
else if($param['status'] == 1){
add_log('recovery', $param['id'], $param);
}
return to_assign();
}
else{
return to_assign(1,'操作失败');
}
}
}

View File

@ -40,20 +40,8 @@ class Nav extends BaseController
//添加
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$nav = Db::name('Nav')->where(['id' => $id])->find();
View::assign('nav', $nav);
}
View::assign('id', $id);
return view();
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(NavCheck::class)->scene('edit')->check($param);
@ -82,16 +70,22 @@ class Nav extends BaseController
add_log('add', $nid, $param);
return to_assign();
}
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
if ($id > 0) {
$nav = Db::name('Nav')->where(['id' => $id])->find();
View::assign('nav', $nav);
}
View::assign('id', $id);
return view();
}
}
//删除
public function delete()
{
$id = get_params('id');
$count = Db::name('NavInfo')->where([
'nav_id' => $id,
])->count();
$count = Db::name('NavInfo')->where(['nav_id' => $id])->count();
if ($count > 0) {
return to_assign(1, '该组下还有导航,无法删除');
}
@ -127,24 +121,8 @@ class Nav extends BaseController
//添加导航
public function nav_info_add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
View::assign('id', $id);
View::assign('nav_id', get_params('nid'));
View::assign('pid', get_params('pid'));
if ($id > 0) {
$nav = Db::name('NavInfo')->where(['id' => $id])->find();
View::assign('nav', $nav);
View::assign('nav_id', $nav['nav_id']);
View::assign('pid', $nav['pid']);
}
return view();
}
//保存添加
public function nav_info_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(NavCheck::class)->scene('editInfo')->check($param);
@ -169,8 +147,22 @@ class Nav extends BaseController
clear_cache('homeNav');
add_log('add', $nid, $param);
return to_assign();
}
}
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$nid = isset($param['nid']) ? $param['nid'] : 0;
$pid = isset($param['pid']) ? $param['pid'] : 0;
if ($id > 0) {
$nav = Db::name('NavInfo')->where(['id' => $id])->find();
View::assign('nav', $nav);
$nid = $nav['nav_id'];
$pid = $nav['pid'];
}
View::assign('id', $id);
View::assign('nav_id', $nid);
View::assign('pid', $pid);
return view();
}
}
//删除

View File

@ -39,37 +39,10 @@ class Role extends BaseController
//添加&编辑
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$menu = get_admin_menu();
$rule = get_admin_rule();
if($id > 0) {
$group = get_admin_group_info($id);
$role_menu = create_tree_list(0, $menu, $group['menus']);
$role_rule = create_tree_list(0, $rule, $group['rules']);
$role = Db::name('AdminGroup')->where(['id' => $id])->find();
View::assign('role', $role);
}
else{
$role_menu = create_tree_list(0, $menu, []);
$role_rule = create_tree_list(0, $rule, []);
}
View::assign('role_menu', $role_menu);
View::assign('role_rule', $role_rule);
View::assign('id', $id);
return view();
}
//提交保存
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
$menuData = isset($param['menu']) ? $param['menu'] : 0;
$ruleData = isset($param['rule']) ? $param['rule'] : 0;
//sort($menuData);
//sort($ruleData);
$param['menus'] = implode(',',$menuData);
$param['rules'] = implode(',',$ruleData);
$ruleData = isset($param['rule']) ? $param['rule'] : 0;
$param['rules'] = implode(',', $ruleData);
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(GroupCheck::class)->scene('edit')->check($param);
@ -95,8 +68,21 @@ class Role extends BaseController
}
//清除菜单\权限缓存
clear_cache('adminMenu');
clear_cache('adminRules');
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$rule = get_admin_rule();
if ($id > 0) {
$rules = get_admin_group_info($id);
$role_rule = create_tree_list(0, $rule, $rules);
$role = Db::name('AdminGroup')->where(['id' => $id])->find();
View::assign('role', $role);
} else {
$role_rule = create_tree_list(0, $rule, []);
}
View::assign('role_rule', $role_rule);
View::assign('id', $id);
return view();
}
}

View File

@ -20,7 +20,7 @@ class Rule extends BaseController
public function index()
{
if (request()->isAjax()) {
$rule = Db::name('adminRule')->order('create_time asc')->select();
$rule = Db::name('adminRule')->order('sort asc,id asc')->select();
return to_assign(0, '', $rule);
} else {
return view();
@ -30,35 +30,18 @@ class Rule extends BaseController
//添加
public function add()
{
return view('', ['pid' => get_params('pid')]);
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
$param['src'] = preg_replace('# #','',$param['src']);
if ($param['id'] > 0) {
$data[$param['field']] = $param['value'];
$data['id'] = $param['id'];
if(!empty($data['title'])){
try {
validate(RuleCheck::class)->scene('edit_title')->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
}
if(!empty($data['src'])){
try {
validate(RuleCheck::class)->scene('edit_src')->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
}
Db::name('AdminRule')->strict(false)->field(true)->update($data);
add_log('edit', $param['id'], $data);
try {
validate(RuleCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
Db::name('AdminRule')->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} else {
try {
validate(RuleCheck::class)->scene('add')->check($param);
@ -66,6 +49,7 @@ class Rule extends BaseController
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$rid = Db::name('AdminRule')->strict(false)->field(true)->insertGetId($param);
//自动为系统所有者管理组分配新增的节点
$group = Db::name('AdminGroup')->find(1);
@ -79,9 +63,18 @@ class Rule extends BaseController
// 删除后台节点缓存
clear_cache('adminRules');
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$pid = isset($param['pid']) ? $param['pid'] : 0;
if($id>0){
$detail = Db::name('AdminRule')->where('id',$id)->find();
View::assign('detail', $detail);
}
View::assign('id', $id);
View::assign('pid', $pid);
return view();
}
}
//删除
public function delete()
{

View File

@ -42,20 +42,8 @@ class Sitemap extends BaseController
//添加
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$cate = Db::name('SitemapCate')->where(['id' => $id])->find();
View::assign('cate', $cate);
}
View::assign('id', $id);
return view();
}
//提交添加
public function post_submit()
{
if (request()->isAjax()) {
$param = get_params();
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(SitemapCateCheck::class)->scene('edit')->check($param);
@ -84,12 +72,21 @@ class Sitemap extends BaseController
if ($sid) {
add_log('add', $sid, $param);
}
// 删除菜单缓存
clear_cache('homeSitemap');
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id > 0) {
$cate = Db::name('SitemapCate')->where(['id' => $id])->find();
View::assign('cate', $cate);
}
View::assign('id', $id);
return view();
}
}
//删除
@ -136,22 +133,8 @@ class Sitemap extends BaseController
//添加网站地图
public function sitemap_info_add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$sitemap_cate_id = empty(get_params('cid')) ? 0 : get_params('cid');
if ($id > 0) {
$sitemap = Db::name('Sitemap')->where(['id' => $id])->find();
View::assign('sitemap', $sitemap);
}
View::assign('id', $id);
View::assign('sitemap_cate_id', $sitemap_cate_id);
return view();
}
//保存网站地图添加
public function sitemap_info_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(SitemapCheck::class)->scene('edit')->check($param);
@ -188,6 +171,17 @@ class Sitemap extends BaseController
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$sitemap_cate_id = isset($param['cid']) ? $param['cid'] : 0;
if ($id > 0) {
$sitemap = Db::name('Sitemap')->where(['id' => $id])->find();
View::assign('sitemap', $sitemap);
}
View::assign('id', $id);
View::assign('sitemap_cate_id', $sitemap_cate_id);
return view();
}
}
//删除网站地图

View File

@ -40,20 +40,8 @@ class Slide extends BaseController
//添加
public function add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
if ($id > 0) {
$slide = Db::name('Slide')->where(['id' => $id])->find();
View::assign('slide', $slide);
}
View::assign('id', $id);
return view();
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(SlideCheck::class)->scene('edit')->check($param);
@ -87,6 +75,15 @@ class Slide extends BaseController
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id > 0) {
$slide = Db::name('Slide')->where(['id' => $id])->find();
View::assign('slide', $slide);
}
View::assign('id', $id);
return view();
}
}
//删除
@ -149,23 +146,8 @@ class Slide extends BaseController
//添加幻灯片
public function slide_info_add()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$slide_id = empty(get_params('sid')) ? 0 : get_params('sid');
if ($id > 0) {
$slide_info = Db::name('SlideInfo')->where(['id' => $id])->find();
View::assign('slide_info', $slide_info);
$slide_id = $slide_info['slide_id'];
}
View::assign('id', $id);
View::assign('slide_id', $slide_id);
return view();
}
//保存幻灯片添加
public function slide_info_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(SlideCheck::class)->scene('editInfo')->check($param);
@ -200,7 +182,20 @@ class Slide extends BaseController
return to_assign();
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$slide_id = isset($param['sid']) ? $param['sid'] : 0;
if ($id > 0) {
$slide_info = Db::name('SlideInfo')->where(['id' => $id])->find();
View::assign('slide_info', $slide_info);
$slide_id = $slide_info['slide_id'];
}
View::assign('id', $id);
View::assign('slide_id', $slide_id);
return view();
}
}
//删除幻灯片
public function slide_info_delete()
{

View File

@ -47,6 +47,7 @@ class User extends BaseController
->paginate($rows, false, ['query' => $param])
->each(function ($item, $key) {
$item->register_time = empty($item->register_time) ? '-' : date('Y-m-d H:i', $item->register_time);
$item->level_name = Db::name('UserLevel')->where(['id' => $item->level])->value('title');
});
return table_assign(0, '', $content);
} else {
@ -57,17 +58,8 @@ class User extends BaseController
//编辑
public function edit()
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$user = Db::name('User')->where(['id' => $id])->find();
View::assign('user', $user);
return view();
}
//提交添加
public function post_submit()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
$res = Db::name('User')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
if ($res) {
@ -78,6 +70,14 @@ class User extends BaseController
}
}
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$user = Db::name('User')->where(['id' => $id])->find();
$levels = Db::name('UserLevel')->where(['status' => 1])->select()->toArray();
View::assign('user', $user);
View::assign('levels', $levels);
return view();
}
}
//查看
@ -85,6 +85,7 @@ class User extends BaseController
{
$id = empty(get_params('id')) ? 0 : get_params('id');
$user = Db::name('User')->where(['id' => $id])->find();
$user['level_name'] = Db::name('UserLevel')->where(['id' => $user['level']])->value('title');
add_log('view', get_params('id'));
View::assign('user', $user);
return view();
@ -110,11 +111,14 @@ class User extends BaseController
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['nickname|title', 'like', '%' . $param['keywords'] . '%'];
$where[] = ['nickname|content|param_id', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['action'])) {
$where['title'] = $param['action'];
}
$rows = empty($param['limit']) ? get_config(app . page_size) : $param['limit'];
$content = DB::name('UserLog')
->field("id,uid,nickname,title,content,ip,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->field("id,uid,nickname,title,content,ip,param_id,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->order('create_time desc')
->where($where)
->paginate($rows, false, ['query' => $param]);
@ -135,6 +139,8 @@ class User extends BaseController
}
return table_assign(0, '', $content);
} else {
$type_action = get_config('log.user_action');
View::assign('type_action', $type_action);
return view();
}
}

84
app/admin/model/Goods.php Normal file
View File

@ -0,0 +1,84 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use app\admin\model\Keywords;
use think\Model;
class Goods extends Model
{
// 获取商品详情
public function detail($id)
{
$goods = \think\facade\Db::name('Goods')->where(['id'=>$id])->find();
if(empty($goods)) {
return $this->error('商品不存在');
}
//轮播图
if(!empty($goods['banner'])) {
$goods['banner_array'] = explode(',',$goods['banner']);
}
//关键字
$keywrod_array = \think\facade\Db::name('ArticleKeywords')
->field('i.aid,i.keywords_id,k.title')
->alias('i')
->join('keywords k', 'k.id = i.keywords_id', 'LEFT')
->order('i.create_time asc')
->where(array('i.aid' => $id, 'k.status' => 1))
->select()->toArray();
$goods['keyword_ids'] = implode(",", array_column($keywrod_array, 'keywords_id'));
$goods['keyword_names'] = implode(',', array_column($keywrod_array, 'title'));
//标签设置
$goods['tag1'] = $goods['tag2'] = $goods['tag3'] = $goods['tag4'] = $goods['tag5'] = $goods['tag6'] =0;
if(!empty($goods['tag_values'])) {
$tag_values_array = explode(',', $goods['tag_values']);
if(in_array('1', $tag_values_array)){
$goods['tag1'] = 1;
}
if(in_array('2', $tag_values_array)){
$goods['tag2'] = 1;
}
if(in_array('3', $tag_values_array)){
$goods['tag3'] = 1;
}
if(in_array('4', $tag_values_array)){
$goods['tag4'] = 1;
}
if(in_array('5', $tag_values_array)){
$goods['tag5'] = 1;
}
if(in_array('6', $tag_values_array)){
$goods['tag6'] = 1;
}
}
return $goods;
}
//插入关键字
public function insertKeyword($keywordArray = [], $aid)
{
$insert = [];
$time = time();
foreach ($keywordArray as $key => $value) {
if (!$value) {
continue;
}
$keywords_id = (new Keywords())->increase($value);
$insert[] = ['aid' => $aid,
'keywords_id' => $keywords_id,
'create_time' => $time,
];
}
$res = \think\facade\Db::name('GoodsKeywords')->strict(false)->field(true)->insertAll($insert);
return $res;
}
}

View File

@ -0,0 +1,15 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\model;
use think\Model;
class GoodsCate extends Model
{
}

View File

@ -9,21 +9,21 @@ namespace app\admin\validate;
use think\Validate;
class MenuCheck extends Validate
class GoodsCateCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:admin_menu',
'title' => 'require|unique:goods_cate',
'id' => 'require',
];
protected $message = [
'title.require' => '菜单名称不能为空',
'title.unique' => '同样的菜单名称已经存在',
'title.require' => '名称不能为空',
'title.unique' => '同样的名称已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['id','title'],
'edit' => ['id', 'title'],
];
}

View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/Apache-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class GoodsCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:article',
'content' => 'require',
'id' => 'require',
'article_cate_id' => 'require',
'status' => 'require',
];
protected $message = [
'title.require' => '标题不能为空',
'title.unique' => '同样的商品标题已经存在',
'cate_id.require' => '所属分类为必选',
'id.require' => '缺少更新条件',
'status.require' => '状态为必选',
];
protected $scene = [
'add' => ['title', 'cate_id', 'content', 'status'],
'edit' => ['title', 'cate_id', 'content', 'id', 'status'],
];
}

View File

@ -0,0 +1,29 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class LevelCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:user_level',
'id' => 'require',
];
protected $message = [
'title.require' => '模块名称不能为空',
'title.unique' => '同样的等级名称已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['id','title'],
];
}

View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
namespace app\admin\validate;
use think\Validate;
class ModuleCheck extends Validate
{
protected $rule = [
'title' => 'require|unique:admin_module',
'name' => 'require|lower|min:2|unique:admin_module',
'id' => 'require',
];
protected $message = [
'title.require' => '模块名称不能为空',
'title.unique' => '同样的模块名称已经存在',
'name.require' => '模块所在目录不能为空',
'name.lower' => '模块所在目录只能是小写字符',
'name.min' => '模块所在目录至少需要2个小写字符',
'name.unique' => '同样的模块所在目录已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title','name'],
'edit' => ['id','title','name'],
];
}

View File

@ -1,65 +1,55 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form body-table">
{if condition="$id eq 0"}
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">新增管理员</h3>
</div>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">登录账号<font>*</font>
</td>
<td class="layui-td-gray">登录账号<font>*</font></td>
<td>
<input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入登录账号"
lay-reqText="请输入登录账号" class="layui-input">
</td>
<td class="layui-td-gray2">用户名<font>*</font>
<input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入登录账号" lay-reqText="请输入登录账号" class="layui-input">
</td>
<td class="layui-td-gray">用户名<font>*</font></td>
<td>
<input type="text" name="nickname" lay-verify="required" placeholder="请输入用户名" lay-reqText="请输入用户名"
autocomplete="off" class="layui-input">
</td>
<td rowspan="3" class="layui-td-gray2">头像<br /><span style="font-size: 12px;">(如若不上传<br />系统将自动生成)</span>
<input type="text" name="nickname" lay-verify="required" placeholder="请输入用户名" lay-reqText="请输入用户名" autocomplete="off" class="layui-input">
</td>
<td rowspan="3" class="layui-td-gray2">头像<br /><span style="font-size: 12px;">(如若不上传<br />系统将自动生成)</span></td>
<td rowspan="3" valign="top" style="width: 100px;">
<div class="layui-upload" style="width: 100px;">
<div class="layui-upload-list" id="demo1" style="width: 100%; height:100px; overflow: hidden;">
<img src="/static/admin/images/nonepic600x600.jpg" height="100" style="max-width: 100%; width: 100%;" />
<input type="hidden" name="thumb" value="">
</div>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;"
id="test1">上传头像</button>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;" id="test1">上传头像</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray2">密码<font>*</font>
</td>
<td class="layui-td-gray">密码<font>*</font></td>
<td>
<input type="password" name="pwd" lay-verify="required" placeholder="请输入密码" lay-reqText="请输入密码"
autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">确认密码<font>*</font>
<input type="password" name="pwd" lay-verify="required" placeholder="请输入密码" lay-reqText="请输入密码" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray">确认密码<font>*</font></td>
<td>
<input type="password" name="pwd_confirm" lay-verify="required" placeholder="请再次输入密码"
lay-reqText="请再次输入密码" autocomplete="off" class="layui-input">
<input type="password" name="pwd_confirm" lay-verify="required" placeholder="请再次输入密码" lay-reqText="请再次输入密码" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">手机号码<font>*</font>
</td>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td>
<input type="text" name="mobile" lay-verify="required" placeholder="请输入手机" lay-reqText="请输入手机"
autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">状态<font>*</font>
<input type="text" name="mobile" lay-verify="required" placeholder="请输入手机" lay-reqText="请输入手机" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray">状态<font>*</font></td>
<td>
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="禁止登录">
</td>
</tr>
<tr>
<td class="layui-td-gray2">用户角色<font>*</font>
<td class="layui-td-gray">用户角色<font>*</font>
</td>
<td colspan="5">
{volist name=":get_admin_group()" id="v"}
@ -68,27 +58,26 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">备注</td>
<td class="layui-td-gray">备注</td>
<td colspan="5">
<textarea name="desc" placeholder="请输入备注" class="layui-textarea"></textarea>
</td>
</tr>
</table>
{else/}
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">编辑管理员</h3>
</div>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">登录账号<font>*</font>
</td>
<td class="layui-td-gray">登录账号<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$admin.id}">
<input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入登录账号"
lay-reqText="请输入登录账号" class="layui-input" value="{$admin.username}">
</td>
<td class="layui-td-gray2">用户名<font>*</font>
<input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入登录账号" lay-reqText="请输入登录账号" class="layui-input" value="{$admin.username}">
</td>
<td class="layui-td-gray">用户名<font>*</font></td>
<td>
<input type="text" name="nickname" lay-verify="required" placeholder="请输入用户名" lay-reqText="请输入用户名"
autocomplete="off" class="layui-input" value="{$admin.nickname}">
<input type="text" name="nickname" lay-verify="required" placeholder="请输入用户名" lay-reqText="请输入用户名" autocomplete="off" class="layui-input" value="{$admin.nickname}">
</td>
<td rowspan="3" class="layui-td-gray2">头像<br /><span style="font-size: 12px;">(如若不上传<br />系统将自动生成)</span>
</td>
@ -98,62 +87,52 @@
<img src="{$admin.thumb}" height="100" style="max-width: 100%; width: 100%;" />
<input type="hidden" name="thumb" value="{$admin.thumb}">
</div>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;"
id="test1">上传头像</button>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;" id="test1">上传头像</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray2">密码</td>
<td class="layui-td-gray">密码</td>
<td>
<input type="password" name="edit_pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">确认密码
</td>
<td class="layui-td-gray">确认密码</td>
<td>
<input type="password" name="edit_pwd_confirm" placeholder="请再次输入密码" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">手机号码<font>*</font>
</td>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td>
<input type="text" name="mobile" lay-verify="required" placeholder="请输入手机" lay-reqText="请输入手机"
autocomplete="off" class="layui-input" value="{$admin.mobile}">
</td>
<td class="layui-td-gray2">状态<font>*</font>
</td>
<td class="layui-td-gray2">状态<font>*</font></td>
<td>
<input type="radio" name="status" value="1" title="正常" {eq name="$admin.status" value="1" }checked{/eq}>
<input type="radio" name="status" value="0" title="禁止登录" {eq name="$admin.status" value="0"
}checked{/eq}>
<input type="radio" name="status" value="0" title="禁止登录" {eq name="$admin.status" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">用户角色<font>*</font>
</td>
<td class="layui-td-gray">用户角色<font>*</font></td>
<td colspan="5">
{volist name=":get_admin_group()" id="v"}
<input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" {volist
name="$admin.group_id" id="a" }{eq name="$a" value="$v.id" }checked{/eq}{/volist} lay-skin="primary">
<input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" {volist name="$admin.group_id" id="a" }{eq name="$a" value="$v.id" }checked{/eq}{/volist} lay-skin="primary">
{/volist}
</td>
</tr>
<tr>
<td class="layui-td-gray2">备注</td>
<td class="layui-td-gray">备注</td>
<td colspan="5">
<textarea name="desc" placeholder="请输入备注" class="layui-textarea">{$admin.desc}</textarea>
</td>
</tr>
</table>
{/if}
<div style="padding: 10px 0">
<div style="padding: 10px">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
<span lay-event="back" class="layui-btn layui-btn-primary">返回</span>
</div>
</form>
{/block}
@ -186,13 +165,13 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/admin/post_submit",
url: "/admin/admin/add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
window.location.href="/admin/admin/index";
layer.close(index);
});
} else {
@ -203,11 +182,10 @@
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/admin/index";
return false;
});
}
</script>

View File

@ -1,14 +1,13 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div style="height:36px">
<form class="layui-form" style="display: inline;">
<input type="text" name="keywords" placeholder="ID/登录账户/用户名/手机号码/备注" class="layui-input" autocomplete="off"
style="max-width: 320px;display: inline;margin: -11px 10px 0 0;" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
</div>
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline">
<input type="text" name="keywords" placeholder="登录账户/用户名/手机号码" class="layui-input" autocomplete="off"/>
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
@ -94,7 +93,7 @@
field: 'right',
title: '操作',
toolbar: '#barDemo',
width: 150,
width: 136,
align: 'center'
}
]

View File

@ -1,23 +1,21 @@
{extend name="common/base"/}
{extend name="common/base" /}
{block name="style"}
<style type="text/css">
.table-title{font-size: 20px; padding-bottom: 12px;}
.latest-news{padding-top: 12px; padding-bottom:30px; padding-left: 20px; position: relative;}
.latest-news .layui-timeline-title{padding-bottom:0; font-size: 14px;}
.latest-news .layui-timeline-item{padding-bottom:5px;}
.layui-timeline-title span{color:#999}
.panel-more{width: 100%; height:48px; line-height: 48px; text-align: center; position: absolute; bottom: 0; left:0; background: linear-gradient(rgba(225,225,225,0),rgba(225,225,225,.8));}
.panel-more{width: 100%; height:48px; line-height: 48px; text-align: center; position: absolute; bottom: 0; left:0;}
.panel-more a{color:#0088FF}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="body-content" style="padding: 20px;">
<div class="table-title">最新动态</div>
<div class="h3-title">操作日志</div>
<div class="latest-news">
<ul class="layui-timeline" id="logs">
</ul>
<div class="panel-more"><a href="javascript:getLogs();">查看更多动态</a></div>
<ul class="layui-timeline" id="logs"></ul>
<div class="panel-more"><a href="javascript:getLogs();">查看更多日志</a></div>
</div>
</div>
{/block}

View File

@ -1,8 +1,14 @@
{extend name="common/base"/}
{block name="style"}
<style>
.checkbox16 .layui-form-checkbox span{font-size:15px;font-weight:800;}
.layui-checkbox-disabled span,.layui-checkbox-disabled[lay-skin=primary] span{color: #666666!important;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<h3 style="font-weight:600; padding:10px 0">基本信息</h3>
<form class="layui-form body-table">
<h3 style="font-weight:600; padding:10px">管理员信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">登录账号</td>
@ -61,78 +67,37 @@
</td>
</tr>
</table>
<h3 style="font-weight:600; padding:10px 0">用户权限</h3>
<h3 class="h3-title2">用户权限</h3>
<table class="layui-table layui-table-form">
{volist name="role_rule" id="vo"}
<tr>
<td class="layui-td-gray2" style="vertical-align:top">权限配置<br>操作菜单可见</td>
<td colspan="3">
<table style="width:100%">
{volist name="role_menu" id="vo"}
<tr>
<td style="font-weight:800">
<input type="checkbox" disabled value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td>
<div style="padding:10px 0;">
{volist name="vo.children" key="k" id="voo"}
<div class="layui-input-inline" style="margin-right:10px; font-weight:800">
<input type="checkbox" disabled value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:10px 0 0 28px; {if condition='$k != count($vo.children)'}margin-bottom:12px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" disabled value="{$voo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
{/volist}
</div>
{/notempty}
{/volist}
</div>
</td>
{/notempty}
</tr>
{/volist}
</table>
<td style="font-weight:800">
<input type="checkbox" disabled value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top">权限配置<br>操作节点可用</td>
<td colspan="3">
<table style="width:100%" id="rule">
{volist name="role_rule" id="vo"}
<tr>
<td style="font-weight:800">
<input type="checkbox" disabled value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td>
<div style="padding:10px 0;">
{volist name="vo.children" key="k" id="voo"}
<div class="layui-input-inline" style="margin-right:10px; font-weight:800">
<input type="checkbox" disabled value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:10px 0 0 28px; {if condition='$k != count($vo.children)'}margin-bottom:12px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" disabled value="{$voo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
{/volist}
</div>
{/notempty}
{/volist}
{notempty name="vo.children"}
<td>
<div style="padding:0 0 0 10px;">
{volist name="vo.children" key="k" id="voo"}
<div class="checkbox16" style="padding:10px 0;">
<input type="checkbox" disabled lay-filter="rule" name="rule[]" value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:0 0 3px; {if condition='$k != count($vo.children)'}margin-bottom:3px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" disabled data-rule="{$voo.id}" name="rule[]" value="{$vooo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
</td>
{/volist}
</div>
{/notempty}
</tr>
{/volist}
</table>
</td>
</div>
</td>
{/notempty}
</tr>
{/volist}
</table>
<div style="padding: 10px 0">
<div style="padding: 10px">
<button lay-event="back" class="layui-btn layui-btn-primary">关闭</button>
</div>
</form>
@ -146,7 +111,7 @@
var TAB = parent.layui.tab,
form = layui.form;
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
$('.body-table').on('click', '[lay-event="back"]', function () {
TAB.sonDelete();
return false;
});

View File

@ -1,15 +1,17 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form body-table">
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">创建文章</h3>
</div>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">文章标题 <span style="color: red">*</span></td>
<td colspan="7"><input type="text" name="title" lay-verify="required" lay-reqText="请输入文章标题" autocomplete="off" placeholder="请输入文章标题"
class="layui-input"></td>
<td class="layui-td-gray">文章标题 <span style="color: red">*</span></td>
<td colspan="7"><input type="text" name="title" lay-verify="required" lay-reqText="请输入文章标题" autocomplete="off" placeholder="请输入文章标题" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray2">文章分类<span style="color: red">*</span></td>
<td class="layui-td-gray">文章分类<span style="color: red">*</span></td>
<td>
<select name="article_cate_id" lay-verify="required" lay-reqText="请选择分类">
<option value="">请选择分类</option>
@ -18,29 +20,29 @@
{/volist}
</select>
</td>
<td class="layui-td-gray2">关键字<span style="color: red">*</span></td>
<td class="layui-td-gray">关键字<span style="color: red">*</span></td>
<td>
<input type="text" id="keyword_name" name="keyword_names" autocomplete="off" lay-verify="required" lay-reqText="请选择关键字" placeholder="请选择关键字"
class="layui-input" readonly>
<input type="hidden" id="keyword_id" name="keyword_ids" autocomplete="off">
</td>
<td class="layui-td-gray2">状态<span style="color: red">*</span></td>
<td class="layui-td-gray">状态<span style="color: red">*</span></td>
<td>
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="下架">
</td>
</tr>
<tr>
<td class="layui-td-gray2">排序</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" value="0" placeholder="请输入排序,数字" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">首页显示</td>
<td class="layui-td-gray">首页显示</td>
<td>
<input type="radio" name="is_home" value="1" title="是" checked>
<input type="radio" name="is_home" value="0" title="否">
</td>
<td class="layui-td-gray2">属性</td>
<td class="layui-td-gray">属性</td>
<td>
<select name="type">
<option value="">请选择属性</option>
@ -51,26 +53,26 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">是否原创</td>
<td class="layui-td-gray">是否原创</td>
<td>
<input type="radio" name="original" value="1" title="是">
<input type="radio" name="original" value="0" title="否" checked>
</td>
<td class="layui-td-gray2">作者/来源</td>
<td class="layui-td-gray">作者/来源</td>
<td>
<input type="text" name="origin" class="layui-input" autocomplete="off" placeholder="请输入文章作者或来源">
</td>
<td class="layui-td-gray2">来源链接</td>
<td class="layui-td-gray">来源链接</td>
<td>
<input type="text" name="origin_url" class="layui-input" autocomplete="off" placeholder="请输入来源链接">
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">文章摘要</td>
<td class="layui-td-gray" style="vertical-align:top;">文章摘要</td>
<td colspan="3">
<textarea name="desc" placeholder="请输入摘要不能超过200个字" class="layui-textarea"></textarea>
</td>
<td class="layui-td-gray2" style="vertical-align:top;">缩略图</td>
<td class="layui-td-gray" style="vertical-align:top;">缩略图</td>
<td>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">上传缩略图尺寸240x136</button>
@ -82,14 +84,14 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">文章内容<span style="color: red">*</span></td>
<td class="layui-td-gray" style="vertical-align:top;">文章内容<span style="color: red">*</span></td>
<td colspan="5">
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" lay-verify="required" lay-reqText="请完善文章内容"
style="border:0;padding:0"></textarea>
</td>
</tr>
</table>
<div class="layui-form-item">
<div class="layui-form-item" style="padding:10px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
@ -134,13 +136,13 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/article/post_submit",
url: "/admin/article/add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
window.location.href="/admin/article/index.html";
layer.close(index);
});
} else {
@ -151,8 +153,8 @@
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/article/index.html";
return false;
});

View File

@ -1,19 +1,11 @@
{extend name="common/base"/}
<!-- 样式 -->
{block name="style"}
<style>
html,body{
height: calc(100% - 20px);
}
</style>
<!-- /样式 -->
<!-- 主体 -->
{block name="body"}
<div class="body-content" style="height: 100%">
<div style="height:39px;">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/article/cate_add">+ 添加分类</a><span style="color:#999;margin-left:20px">点击表格内容可编辑</span>
<div class="body-table" style="margin-bottom:0">
<div class="layui-form-bar">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加分类</button>
</div>
<div style="height: calc(100% - 30px)">
<div>
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
@ -28,9 +20,8 @@
<script>
var editObj=null,ptable=null,treeGrid=null,tableId='treeTable',layer=null;
function init(layui){
var table=layui.table,form = layui.form;
var table=layui.table,form = layui.form,rightpage = layui.rightpage,layer=layui.layer;
treeGrid = layui.treeGrid;//很重要
layer=layui.layer;
ptable=treeGrid.render({
id:tableId
,elem: '#'+tableId
@ -42,44 +33,36 @@
,treeShowName:'title'//以树形式显示的字段
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field: 'sort', title: '排序', edit: "text", align:'center', style:'cursor: pointer;', width:80}
,{field:'title', edit:'text',width:240, title: '分类名称'}
,{field:'pid', title: '父级ID', edit:"text",width:80, align:'center'}
,{field:'keywords', title: '关键词', edit:"text",width:200,}
,{field:'desc', title: '描述', edit:"text"}
,{width:100,title: '操作', align:'center'
,templet: function(d){
var html='';
var addBtn='<a class="layui-btn layui-btn-normal layui-btn-xs" title="添加分类" href="/admin/article/cate_add?pid='+d.id+'">添加</a>';
var delBtn='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
return addBtn+delBtn;
,{field: 'sort', title: '排序', align:'center', width:80}
,{field:'title',width:240, title: '分类名称'}
,{field:'pid', title: '父级ID',width:80, align:'center'}
,{field:'keywords', title: '关键词', width:200,}
,{field:'desc', title: '描述'}
,{width:160,title: '操作', align:'center',templet: function(d){
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子分类</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
return html;
}
}
]]
,page:false
//,skin:'line'
});
//单元格编辑
treeGrid.on('edit('+tableId+')', function(obj){
layer.confirm('确定要提交修改吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url:"/admin/article/cate_post_submit",
type:'post',
data:{id:obj.data.id,field:obj.field,value:obj.value},
success:function(res){
layer.msg(res.msg);
if(res.code == 1){
setTimeout(function(){
location.reload()
},2000)
}
}
})
layer.close(index);
});
//表头工具栏事件
$('.add-menu').on('click', function(){
rightpage.open("/admin/article/cate_add",'900px');
return;
});
//删除
//操作按钮
treeGrid.on('tool('+tableId+')',function (obj) {
if (obj.event === 'add') {
rightpage.open('/admin/article/cate_add?pid='+obj.data.id,'900px');
return;
}
if (obj.event === 'edit') {
rightpage.open('/admin/article/cate_add?id='+obj.data.id,'900px');
return;
}
if(obj.event === 'del'){
layer.confirm('确定要删除吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
@ -99,6 +82,6 @@
});
}
</script>
{include file="common/layui" base='base' extend="['treeGrid']" callback="init" /}
{include file="common/layui" base='base' extend="['treeGrid','rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,42 +1,43 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">文章分类</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">父级分类<font>*</font></td>
<td class="layui-td-gray">父级分类<font>*</font></td>
<td>
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
<option value="0">作为顶级分类</option>
{volist name=":set_recursion(get_article_cate())" id="v"}
<option value="{$v.id}" {eq name="pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
<option value="{$v.id}" {eq name="pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray2">分类名称<font>*</font></td>
<td class="layui-td-gray">分类名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input">
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input" {notempty name="$cate.title" }value="{$cate.title}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">排序</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input">
<input type="text" name="sort" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input" {notempty name="$cate.sort" }value="{$cate.sort}" {/notempty}>
</td>
<td class="layui-td-gray2">关键词</td>
<td class="layui-td-gray">关键词</td>
<td>
<input type="text" name="keywords" placeholder="请输入关键词,用“,”隔开,可空" autocomplete="off" class="layui-input">
<input type="text" name="keywords" placeholder="请输入关键词,用“,”隔开,可空" autocomplete="off" class="layui-input" {notempty name="$cate.keywords" }value="{$cate.keywords}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">描述</td>
<td colspan="3"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea"></textarea></td>
<td class="layui-td-gray">描述</td>
<td colspan="3"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea">{notempty name="$cate.desc" }{$cate.desc}{/notempty}</textarea></td>
</tr>
</table>
<div style="padding: 10px 0">
<input type="hidden" name="id" value="{$id}" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -52,28 +53,20 @@
//监听提交
form.on('submit(webform)', function(data){
$.ajax({
url:"/admin/article/cate_post_submit",
type:'post',
data:data.field,
success:function(e){
if(e.code==0){
layer.confirm('保存成功,返回列表页吗?', {icon: 3, title:'提示'}, function(index){
history.back(-1);
layer.close(index);
});
}else{
layer.msg(e.msg);
url:"/admin/article/cate_add",
type:'post',
data:data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
setTimeout(function(){
parent.location.reload();
},1000);
}
}
}
})
return false;
});
//监听返回
$('.body-content').on('click','[lay-event="back"]',function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base='base' extend="[]" callback="init" /}

View File

@ -1,16 +1,18 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<div>
<form class="layui-form body-table">
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">编辑文章</h3>
</div>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">文章标题 <span style="color: red">*</span></td>
<td class="layui-td-gray">文章标题 <span style="color: red">*</span></td>
<td colspan="7"> <input type="text" name="title" lay-verify="required" lay-reqText="请输入文章标题" autocomplete="off" placeholder="请输入文章标题"
class="layui-input" value="{$article.title}"></td>
</tr>
<tr>
<td class="layui-td-gray2">文章分类<span style="color: red">*</span></td>
<td class="layui-td-gray">文章分类<span style="color: red">*</span></td>
<td>
<select name="article_cate_id" lay-verify="required" lay-reqText="请选择分类">
<option value="">请选择分类</option>
@ -19,30 +21,30 @@
{/volist}
</select>
</td>
<td class="layui-td-gray2">关键字<span style="color: red">*</span></td>
<td class="layui-td-gray">关键字<span style="color: red">*</span></td>
<td>
<input type="text" id="keyword_name" name="keyword_names" autocomplete="off" lay-verify="required" lay-reqText="请选择关键字" placeholder="请选择关键字"
class="layui-input" value="{$article.keyword_names}" readonly>
<input type="hidden" id="keyword_id" name="keywords_id" autocomplete="off" value="{$article.keyword_ids}">
</td>
<td class="layui-td-gray2">状态<span style="color: red">*</span></td>
<td class="layui-td-gray">状态<span style="color: red">*</span></td>
<td>
<input type="radio" name="status" value="1" title="正常" {eq name="$article.status" value="1" }checked{/eq}>
<input type="radio" name="status" value="0" title="下架" {eq name="$article.status" value="0" }checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">排序</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input"
value="{$article.sort}">
</td>
<td class="layui-td-gray2">首页显示</td>
<td class="layui-td-gray">首页显示</td>
<td>
<input type="radio" name="is_home" value="1" title="是" {eq name="$article.is_home" value="1" }checked{/eq}>
<input type="radio" name="is_home" value="0" title="否" {eq name="$article.is_home" value="0" }checked{/eq}>
</td>
<td class="layui-td-gray2">属性</td>
<td class="layui-td-gray">属性</td>
<td>
<select name="type">
<option value="">请选择属性</option>
@ -53,28 +55,28 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">是否原创</td>
<td class="layui-td-gray">是否原创</td>
<td>
<input type="radio" name="original" value="1" title="是" {eq name="$article.original" value="1" }checked{/eq}>
<input type="radio" name="original" value="0" title="否" {eq name="$article.original" value="0" }checked{/eq}>
</td>
<td class="layui-td-gray2">作者/来源</td>
<td class="layui-td-gray">作者/来源</td>
<td>
<input type="text" name="origin" class="layui-input" autocomplete="off" placeholder="请输入文章来源"
value="{$article.origin}">
</td>
<td class="layui-td-gray2">来源链接</td>
<td class="layui-td-gray">来源链接</td>
<td>
<input type="text" name="origin_url" class="layui-input" autocomplete="off" placeholder="请输入来源链接"
value="{$article.origin_url}">
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">摘要</td>
<td class="layui-td-gray" style="vertical-align:top;">摘要</td>
<td colspan="3">
<textarea name="desc" placeholder="请输入摘要不能超过200个字" class="layui-textarea">{$article.desc}</textarea>
</td>
<td class="layui-td-gray2" style="vertical-align:top;">缩略图</td>
<td class="layui-td-gray" style="vertical-align:top;">缩略图</td>
<td>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">上传缩略图尺寸240x136</button>
@ -86,20 +88,19 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">文章内容<span style="color: red">*</span></td>
<td class="layui-td-gray" style="vertical-align:top;">文章内容<span style="color: red">*</span></td>
<td colspan="5">
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" lay-verify="required" lay-reqText="请完善文章内容"
style="border:0;padding:0">{$article.content}</textarea>
</td>
</tr>
</table>
<div class="layui-form-item">
<div class="layui-form-item" style="padding:10px;">
<input type="hidden" name="id" value="{$article.id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</div>
</form>
{/block}
<!-- /主体 -->
@ -140,13 +141,13 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/article/post_submit",
url: "/admin/article/add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
window.location.href="/admin/article/index.html";
layer.close(index);
});
} else {
@ -157,8 +158,8 @@
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/article/index.html";
return false;
});

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline">
<select name="article_cate_id">
<option value="">请选择文章分类</option>

View File

@ -1,6 +1,6 @@
<script src="{__LAYUI__}/layui.js?v={:get_system_config('web','version')}"></script>
<script>
var base='{__ADMIN_JS__}/module/';
var base="{__LAYUI__}/plugin/";
{if condition=" '[base]'!=='base' "}
base=[base];
{/if}
@ -16,7 +16,7 @@
}
layui.config({
base: base,
version:'{:get_system_config('web','version')}'
version:"{:get_system_config('web','version')}"
}).extend(extend).use(extendArray, function(){
callback(layui);
});

View File

@ -1,18 +1,17 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">配置项</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">配置名称<font>*</font>
<td class="layui-td-gray">配置名称<font>*</font>
</td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入配置名称"
class="layui-input" {notempty name="$config.title"}
value="{$config.title}" {/notempty}>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入配置名称" lay-reqText="请输入配置名称" class="layui-input" {notempty name="$config.title"} value="{$config.title}" {/notempty}>
</td>
<td class="layui-td-gray2">状态<font>*</font></td>
<td class="layui-td-gray">状态<font>*</font></td>
<td>{if condition="$id eq 0"}
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="禁用">
@ -25,19 +24,25 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align: top;">
<td class="layui-td-gray" style="vertical-align: top;">
配置标识<font>*</font>
</td>
<td colspan="3">
<input style="width: 300px;" type="text" name="name" placeholder="请输入配置标识" lay-verify="required" autocomplete="off" class="layui-input" {notempty name="$config.name"} value="{$config.name}" {/notempty}>
<span style ="color: red; font-size: 12px; margin-top: 5px;">(注意:新增配置项以后,需要对应新增模板文件,模板文件名称需与标识名称一致,建议复制现有的配置模板文件,然后根据需求修改对应的表单即可)</span>
<input type="text" name="name" lay-verify="required" placeholder="请输入配置标识" lay-reqText="请输入配置标识" autocomplete="off" class="layui-input" {notempty name="$config.name"} value="{$config.name}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align: top;">
注意
</td>
<td colspan="3">
<span style ="color: red; font-size: 12px;">(注意:新增配置项以后,需要对应新增模板文件,模板文件名称需与标识名称一致,建议复制现有的配置模板文件,然后根据需求修改对应的表单即可)</span>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -49,31 +54,24 @@
function init(layui) {
var form = layui.form
, layer = layui.layer;
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/post_submit",
url: "/admin/conf/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>

View File

@ -1,16 +1,15 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<h3 style="height:36px">邮箱配置</h3>
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">邮箱配置</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">SMTP地址<font>*</font>
</td>
<td>
<input type="hidden" name="id" value="{$id}">
<input type="text" name="smtp" lay-verify="required" autocomplete="off" placeholder="请输入SMTP服务器地址"
class="layui-input" {notempty name="$config.smtp"} value="{$config.smtp}" {/notempty} style="width:240px;display: inline-block;">
<input type="text" name="smtp" lay-verify="required" autocomplete="off" placeholder="请输入SMTP服务器地址" lay-reqText="请输入SMTP服务器地址" class="layui-input" {notempty name="$config.smtp"} value="{$config.smtp}" {/notempty} style="width:240px;display: inline-block;">
<span style="color:#999; font-size:12px;">QQ邮箱的SMTP服务器地址是smtp.qq.com163邮箱的SMTP服务器地址是smtp.163.com</span>
</td>
</tr>
@ -18,8 +17,7 @@
<td class="layui-td-gray2">协议端口号<font>*</font>
</td>
<td>
<input type="text" name="smtp_port" lay-verify="required" autocomplete="off" placeholder="请输入端口"
class="layui-input" {notempty name="$config.smtp_port"} value="{$config.smtp_port}" {/notempty} style="width:240px;display: inline-block;">
<input type="text" name="smtp_port" lay-verify="required" autocomplete="off" placeholder="请输入端口" lay-reqText="请输入端口" class="layui-input" {notempty name="$config.smtp_port"} value="{$config.smtp_port}" {/notempty} style="width:240px;display: inline-block;">
<span style="color:#999; font-size:12px;">QQ邮箱的ssl协议方式端口号是465/587163邮箱的ssl协议方式端口号是465/994</span>
</td>
</tr>
@ -27,8 +25,7 @@
<td class="layui-td-gray2">邮箱账户<font>*</font>
</td>
<td>
<input type="text" name="smtp_user" lay-verify="required" autocomplete="off" placeholder="请输入邮箱用户名"
class="layui-input" {notempty name="$config.smtp_user"} value="{$config.smtp_user}" {/notempty} style="width:240px;display: inline-block;">
<input type="text" name="smtp_user" autocomplete="off" lay-verify="required" placeholder="请输入邮箱用户名" lay-reqText="请输入邮箱用户名" class="layui-input" {notempty name="$config.smtp_user"} value="{$config.smtp_user}" {/notempty} style="width:240px;display: inline-block;">
<span style="color:#999; font-size:12px;">gougucms@qq.com</span>
</td>
</tr>
@ -47,7 +44,7 @@
<td class="layui-td-gray2">发送人<font>*</font>
</td>
<td>
<input type="text" name="from" lay-verify="required" autocomplete="off" placeholder="请输入要显示的发送者"
<input type="text" name="from" autocomplete="off" lay-verify="required" placeholder="请输入要显示的发送者" lay-reqText="请输入要显示的发送者"
class="layui-input" {notempty name="$config.from"} value="{$config.from}" {/notempty} style="width:240px; display: inline-block;">
<span style="color:#999; font-size:12px;">用于展示给发送方勾股CMS系统管理员</span>
</td>
@ -56,7 +53,7 @@
<td class="layui-td-gray2">显示的邮箱<font>*</font>
</td>
<td>
<input type="text" name="email" lay-verify="required" autocomplete="off" placeholder="请输入要显示的发送者邮箱"
<input type="text" name="email" lay-verify="required" autocomplete="off" placeholder="请输入要显示的发送者邮箱" lay-reqText="请输入要显示的发送者邮箱"
class="layui-input" {notempty name="$config.email"} value="{$config.email}" {/notempty} style="width:240px;display: inline-block;">
<span style="color:#999;font-size:12px;">可以不同于上面的账户用于展示给发送方的邮箱admin@gougucms.com</span>
</td>
@ -70,7 +67,6 @@
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button lay-event="email" class="layui-btn">发送测试</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -86,17 +82,15 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/conf_submit",
url: "/admin/conf/edit",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,关闭本页面吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
@ -116,7 +110,7 @@
return false;
}
$.ajax({
url: "/admin/api/email_test",
url: "/home/api/email_test",
data: { email: value },
type: "post",
beforeSend: function () {
@ -133,11 +127,6 @@
});
return false;
})
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>

View File

@ -1,7 +1,7 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div class="body-table">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
@ -9,8 +9,8 @@
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/conf/add">+ 添加配置项</a>
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加配置项</button>
</div>
</script>
{/block}
@ -19,15 +19,17 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '配置列表',
toolbar: '#toolbarDemo',
url: '/admin/conf/index',
url: "/admin/conf/index",
page: true, //开启分页
limit: 20,
cols: [
@ -38,6 +40,7 @@
align: 'center'
},{
field: 'title',
width: 200,
title: '配置名称'
}, {
field: 'name',
@ -53,32 +56,24 @@
title: '操作',
align: 'center',
templet: function (d) {
var html = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/conf/add?id=' + d.id + '">修改</a><a class="layui-btn layui-btn-normal layui-btn-xs" href="/admin/conf/edit?id=' + d.id + '">编辑配置</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>';
var html = '<div class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="add">修改</button><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit" >编辑配置</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></div>';
return html;
}
}]
]
});
//监听搜索提交
form.on('submit(webform)', function (data) {
if (data.field.keywords) {
tableIns.reload({
where: {
keywords: data.field.keywords
},
page: {
curr: 1
}
});
} else {
location.reload();
//监听行工具事件
table.on('tool(test)', function(obj){
var data = obj.data;
if(obj.event === 'add'){
rightpage.open('/admin/conf/add?id='+data.id,'900px');
return;
}
if(obj.event === 'edit'){
rightpage.open('/admin/conf/edit?id='+data.id);
return;
}
return false;
});
//删除
table.on('tool(test)', function (obj) {
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', {
icon: 3,
@ -101,8 +96,33 @@
});
}
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/conf/add",'900px');
return;
}
});
//监听搜索提交
form.on('submit(webform)', function (data) {
if (data.field.keywords) {
tableIns.reload({
where: {
keywords: data.field.keywords
},
page: {
curr: 1
}
});
} else {
location.reload();
}
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,21 +1,19 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<h3 style="height:36px">其他配置</h3>
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">其他配置</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">开发者</td>
<td>
<input type="hidden" value="{$id}" name="id">
<input type="text" name="author" autocomplete="off" placeholder="请输入开发者"
lay-reqText="请输入开发者" class="layui-input"{notempty name="$config.author"} value="{$config.author}" {/notempty}>
<input type="text" name="author" autocomplete="off" placeholder="请输入开发者" lay-reqText="请输入开发者" class="layui-input"{notempty name="$config.author"} value="{$config.author}" {/notempty}>
</td>
<td class="layui-td-gray2">开发版本号
</td>
<td>
<input type="text" name="version" autocomplete="off" placeholder="请输入版本号"
lay-reqText="请输入版本号" class="layui-input" {notempty name="$config.version"} value="{$config.version}" {/notempty}>
<input type="text" name="version" autocomplete="off" placeholder="请输入版本号" lay-reqText="请输入版本号" class="layui-input" {notempty name="$config.version"} value="{$config.version}" {/notempty}>
</td>
</tr>
</table>
@ -23,7 +21,6 @@
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -39,30 +36,20 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/conf_submit",
url: "/admin/conf/edit",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,关闭本页面吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,34 +1,30 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<h3 style="height:36px">Token配置</h3>
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">Token配置</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">Token签发组织</td>
<td>
<input type="hidden" value="{$id}" name="id">
<input type="text" name="iss" autocomplete="off" placeholder="请输入签发组织"
lay-reqText="请输入签发组织" class="layui-input"{notempty name="$config.iss"} value="{$config.iss}" {/notempty}>
<input type="text" name="iss" autocomplete="off" placeholder="请输入签发组织" lay-reqText="请输入签发组织" class="layui-input"{notempty name="$config.iss"} value="{$config.iss}" {/notempty}>
</td>
<td class="layui-td-gray2">Token签发作者
</td>
<td>
<input type="text" name="aud" autocomplete="off" placeholder="请输入签发作者"
lay-reqText="请输入签发作者" class="layui-input" {notempty name="$config.aud"} value="{$config.aud}" {/notempty}>
<input type="text" name="aud" autocomplete="off" placeholder="请输入签发作者" lay-reqText="请输入签发作者" class="layui-input" {notempty name="$config.aud"} value="{$config.aud}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">Token Secrect</td>
<td>
<input type="text" name="secrect" autocomplete="off" placeholder="请输入secrect"
lay-reqText="请输入secrect" class="layui-input"{notempty name="$config.secrect"} value="{$config.secrect}" {/notempty}>
<input type="text" name="secrect" autocomplete="off" placeholder="请输入secrect" lay-reqText="请输入secrect" class="layui-input"{notempty name="$config.secrect"} value="{$config.secrect}" {/notempty}>
</td>
<td class="layui-td-gray2">Token过期时间
</td>
<td>
<input type="text" name="exptime" autocomplete="off" placeholder="请输入过期时间"
lay-reqText="请输入过期时间" class="layui-input" {notempty name="$config.exptime"} value="{$config.exptime}" {/notempty}>
<input type="text" name="exptime" autocomplete="off" placeholder="请输入过期时间" lay-reqText="请输入过期时间" class="layui-input" {notempty name="$config.exptime"} value="{$config.exptime}" {/notempty}>
</td>
</tr>
</table>
@ -44,7 +40,6 @@
<div style="padding: 20px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -60,20 +55,15 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/conf_submit",
url: "/admin/conf/edit",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,关闭本页面吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
@ -137,7 +127,7 @@
return;
}
$.ajax({
url:"/api/index/reg",
url: "/api/index/reg",
type:'post',
data:{username:username,pwd:password},
success:function(res){
@ -181,7 +171,7 @@
return;
}
$.ajax({
url:"/api/index/login",
url: "/api/index/login",
type:'post',
data:{username:username,password:password},
success:function(res){

View File

@ -1,22 +1,20 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<h3 style="height:36px">系统配置</h3>
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">系统配置</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">系统名称<font>*</font>
</td>
<td>
<input type="hidden" name="id" value="{$id}">
<input type="text" name="admin_title" lay-verify="required" autocomplete="off" placeholder="请输入系统名称"
lay-reqText="请输入系统名称" class="layui-input" {notempty name="$config.admin_title"} value="{$config.admin_title}" {/notempty}>
<input type="text" name="admin_title" lay-verify="required" autocomplete="off" placeholder="请输入系统名称" lay-reqText="请输入系统名称" class="layui-input" {notempty name="$config.admin_title"} value="{$config.admin_title}" {/notempty}>
</td>
<td class="layui-td-gray2">网站名称<font>*</font>
</td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入网站平台名称"
lay-reqText="请输入网站名称" class="layui-input" {notempty name="$config.title"} value="{$config.title}" {/notempty}>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入网站平台名称" lay-reqText="请输入网站名称" class="layui-input" {notempty name="$config.title"} value="{$config.title}" {/notempty}>
</td>
<td rowspan="3" class="layui-td-gray2">系统LOGO</td>
<td rowspan="3" style="width: 240px;">
@ -34,34 +32,29 @@
<td class="layui-td-gray2">网站域名<font>*</font>
</td>
<td>
<input type="text" name="domain" lay-verify="required" autocomplete="off" placeholder="请输入网站域名"
lay-reqText="请输入网站域名" class="layui-input" {notempty name="$config.domain"} value="{$config.domain}" {/notempty}>
<input type="text" name="domain" lay-verify="required" autocomplete="off" placeholder="请输入网站域名" lay-reqText="请输入网站域名" class="layui-input" {notempty name="$config.domain"} value="{$config.domain}" {/notempty}>
</td>
<td class="layui-td-gray2">ICP备案号</td>
<td>
<input type="text" name="icp" autocomplete="off" placeholder="请输入ICP备案号" class="layui-input"
{notempty name="$config.icp"} value="{$config.icp}" {/notempty}>
<input type="text" name="icp" autocomplete="off" placeholder="请输入ICP备案号" class="layui-input" {notempty name="$config.icp"} value="{$config.icp}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">SEO关键词<font>*</font>
</td>
<td>
<input type="text" name="keywords" lay-verify="required" autocomplete="off" placeholder="多个关键词用“,”隔开"
lay-reqText="请输入SEO关键字" class="layui-input" {notempty name="$config.keywords"} value="{$config.keywords}" {/notempty}>
<input type="text" name="keywords" lay-verify="required" autocomplete="off" placeholder="多个关键词用“,”隔开" lay-reqText="请输入SEO关键字" class="layui-input" {notempty name="$config.keywords"} value="{$config.keywords}" {/notempty}>
</td>
<td class="layui-td-gray2">公安备案号</td>
<td>
<input type="text" name="beian" autocomplete="off" placeholder="请输入公安备案号" class="layui-input"
{notempty name="$config.beian"} value="{$config.beian}" {/notempty}>
<input type="text" name="beian" autocomplete="off" placeholder="请输入公安备案号" class="layui-input" {notempty name="$config.beian"} value="{$config.beian}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">SEO描述<font>*</font>
</td>
<td colspan="5">
<textarea name="desc" lay-verify="required" placeholder="请输入网站描述" lay-reqText="请输入网站描述"
class="layui-textarea">{notempty name="$config.desc"}{$config.desc} {/notempty}</textarea>
<textarea name="desc" lay-verify="required" placeholder="请输入网站描述" lay-reqText="请输入网站描述" class="layui-textarea">{notempty name="$config.desc"}{$config.desc} {/notempty}</textarea>
</td>
</tr>
<tr>
@ -73,14 +66,12 @@
<tr>
<td class="layui-td-gray2">版权信息</td>
<td colspan="3">
<input type="text" name="copyright" autocomplete="off" placeholder="请输入版权信息"
lay-reqText="请输入版权信息" class="layui-input"{notempty name="$config.copyright"} value="{$config.copyright}" {/notempty}>
<input type="text" name="copyright" autocomplete="off" placeholder="请输入版权信息" lay-reqText="请输入版权信息" class="layui-input"{notempty name="$config.copyright"} value="{$config.copyright}" {/notempty}>
</td>
<td class="layui-td-gray2">代码版本号<font>*</font>
</td>
<td>
<input type="text" lay-verify="required" name="version" autocomplete="off" placeholder="请输入版本号"
lay-reqText="请输入版本号" class="layui-input" {notempty name="$config.version"} value="{$config.version}" {/notempty}>
<input type="text" lay-verify="required" name="version" autocomplete="off" placeholder="请输入版本号" lay-reqText="请输入版本号" class="layui-input" {notempty name="$config.version"} value="{$config.version}" {/notempty}>
</td>
</tr>
</table>
@ -88,7 +79,6 @@
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -106,7 +96,7 @@
//logo上传
var uploadInst = upload.render({
elem: '#test1',
url: '/admin/api/upload',
url: "/admin/api/upload",
done: function (res) {
//如果上传失败
if (res.code == 1) {
@ -122,30 +112,20 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/conf_submit",
url: "/admin/conf/edit",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,关闭本页面吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,7 +1,7 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 style="height:36px">微信配置</h3>
<table class="layui-table layui-table-form">
<tr>
@ -61,7 +61,6 @@
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -75,32 +74,22 @@
layer = layui.layer;
//监听提交
form.on('submit(webform)', function(data) {
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/conf/conf_submit",
url: "/admin/conf/edit",
type: 'post',
data: data.field,
success: function(e) {
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,关闭本页面吗?', {
icon: 3,
title: '提示'
}, function(index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,7 +1,7 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div class="body-table">
<table cellspacing="0" cellpadding="0" border="0" class="layui-table">
<tr style="background-color: #f5f5f5; text-align: center;">
<th style=" text-align: center; font-weight: 800;"><span>文件名称</span></th>
@ -9,7 +9,7 @@
<th style=" text-align: center; font-weight: 800;"><span>文件大小</span></th>
<th style=" text-align: center; font-weight: 800;"><span>文件格式</span></th>
<th style=" text-align: center; font-weight: 800;"><span>分隔符</span></th>
<th style=" text-align: center; font-weight: 800;"><span>操作</span></th>
<th style=" text-align: center; font-weight: 800; width:222px"><span>操作</span></th>
</tr>
{empty name="list"}
<tr>
@ -17,8 +17,8 @@
</tr>
{/empty}
{volist name="list" id="vo" key="k"}
<tr style="background-color: #f5f5f5;">
<td colspan="6">备份时间:{$vo.time}</td>
<tr style="background-color: #fafafa;">
<td colspan="6"><strong>备份时间:{$vo.time}</strong></td>
</tr>
{volist name="vo.data" id="voo"}
<tr>
@ -30,8 +30,8 @@
<td align="center"><span>.sql</span></td>
<td align="center"><span>{$voo.compress}</span></td>
<td align="center" data-id='{$voo.time}'>
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="import">数据还原</a>
<a class="layui-btn layui-btn-xs" href='/admin/database/downfile?name={:date("Ymd",$voo.time)}{$voo.compress}{:date("His",$voo.time)}{$voo.compress}{$voo.part}.sql'>备份下载</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">备份删除</a>
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="import">数据还原</a>
<a class="layui-btn layui-btn-xs" href='/database/downfile?name={:date("Ymd",$voo.time)}{$voo.compress}{:date("His",$voo.time)}{$voo.compress}{$voo.part}.sql'>备份下载</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">备份删除</a></div>
</td>
</tr>
{/volist}

View File

@ -1,7 +1,7 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div class="body-table">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
@ -25,7 +25,7 @@
elem: '#test',
title: '数据备份',
toolbar: '#toolbarDemo',
url: '/admin/database/database', //数据接口
url: "/admin/database/database", //数据接口
page: false,
cols: [
[ //表头

View File

@ -0,0 +1,287 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<style>
.upload-img {
width:100px;
height:120px;
overflow:hidden;
position:relative;
border:1px solid #eee;
padding:1px;
margin:5px;
float:left;
}
.upload-close{
position:absolute;
top:1px;
right:1px;
}
</style>
<form class="layui-form body-table">
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">创建商品</h3>
</div>
<table class="layui-table">
<tr>
<td class="layui-td-gray">商品标题 <span style="color: red">*</span></td>
<td colspan="3"><input type="text" name="title" lay-verify="required" lay-reqText="请输入商品标题" placeholder="请输入商品标题" class="layui-input"></td>
<td class="layui-td-gray">状态 <span style="color: red">*</span></td>
<td>
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="下架">
</td>
</tr>
<tr>
<td class="layui-td-gray">关键字 <span style="color: red">*</span></td>
<td colspan="3">
<input type="text" id="keyword_name" name="keyword_names" lay-verify="required" lay-reqText="请选择关键字" placeholder="请选择关键字" class="layui-input" readonly>
<input type="hidden" id="keyword_id" name="keyword_ids">
</td>
<td class="layui-td-gray">商品分类<span style="color: red">*</span></td>
<td>
<select name="cate_id" lay-verify="required" lay-reqText="请选择商品分类">
<option value="">请选择商品分类</option>
{volist name=":set_recursion(get_goods_cate())" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">商品卖点 <span style="color: red">*</span></td>
<td colspan="3">
<input type="text" name="tips" lay-verify="required" lay-reqText="请输入商品卖点" placeholder="一句话描述商品卖点30字以内" class="layui-input">
</td>
<td class="layui-td-gray" rowspan="3">缩略图 <span style="color: red">*</span></td>
<td rowspan="3" style="vertical-align:top">
<div class="layui-upload" style="text-align:center;">
<button type="button" class="layui-btn layui-btn-sm" id="test1">上传商品封面图(尺寸750x560)</button>
<div class="layui-upload-list" id="demo1">
<img src="" width="100" style="width:200px;max-width:200px"/>
<input type="hidden" name="thumb" value="" lay-verify="required" lay-reqText="请上传缩略图">
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray" style="vertical-align:top;">商品简介</td>
<td colspan="3">
<textarea name="desc" placeholder="请输入商品简介200字以内" class="layui-textarea"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray">商品标签 <span style="color: red">*</span></td>
<td colspan="3">
<input type="checkbox" name="tag_values[]" title="正品保证" lay-skin="primary" value="1" checked />
<input type="checkbox" name="tag_values[]" title="一年保修" lay-skin="primary" value="2" checked />
<input type="checkbox" name="tag_values[]" title="七天退换(拆封后不支持)" lay-skin="primary" value="3" />
<input type="checkbox" name="tag_values[]" title="赠运费险" lay-skin="primary" value="4" />
<input type="checkbox" name="tag_values[]" title="闪电发货" lay-skin="primary" value="5" />
<input type="checkbox" name="tag_values[]" title="售后无忧" lay-skin="primary" value="6" />
</td>
</tr>
<tr>
<td class="layui-td-gray">市场价格 <span style="color: red">*</span></td>
<td>
<input type="text" name="base_price" lay-verify="required|number" lay-reqText="请输入市场价格" placeholder="请输入市场价格" class="layui-input">
</td>
<td class="layui-td-gray">实际价格 <span style="color: red">*</span></td>
<td>
<input type="text" name="price" lay-verify="required|number" lay-reqText="请输入实际价格" placeholder="请输入实际价格" class="layui-input">
</td>
<td class="layui-td-gray">是否包邮 <span style="color: red">*</span></td>
<td colspan="5">
<input type="radio" name="is_mail" value="1" title="是" checked lay-verify="otherReq" lay-reqText="请选择是否包邮">
<input type="radio" name="is_mail" value="0" title="否" lay-verify="otherReq" lay-reqText="请选择是否包邮">
</td>
</tr>
<tr>
<td class="layui-td-gray">首页显示</td>
<td>
<input type="radio" name="is_home" value="1" title="是" checked>
<input type="radio" name="is_home" value="0" title="否">
</td>
<td class="layui-td-gray">属性</td>
<td>
<select name="type">
<option value="">请选择属性</option>
<option value="1">精华</option>
<option value="2">热门</option>
<option value="3">推荐</option>
</select>
</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" value="0" lay-verify="number" placeholder="请输入排序,数字" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray">商品图集</td>
<td colspan="5">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-sm" id="test2">上传商品图</button>
<div class="layui-upload-list clearfix" id="demo2">
<input type="hidden" name="banner" value="">
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray" style="vertical-align:top;">商品介绍 <span style="color: red">*</span></td>
<td colspan="5">
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0"></textarea>
</td>
</tr>
</table>
<div class="layui-form-item" style="padding:10px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
// 查找指定的元素在数组中的位置
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) {
return i;
}
}
return -1;
};
// 通过索引删除数组元素
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
function init(layui) {
var form = layui.form
, layer = layui.layer
, tagspicker = layui.tagpicker
, upload = layui.upload;
var tags = new tagspicker({
'url': '/admin/api/get_keyword_cate',
'target': 'keyword_name',
'tag_ids': 'keyword_id',
'tag_tags': 'keyword_name',
'height': 500,
'isDiy': 1
});
//自定义验证规则
form.verify({
otherReq: function(value,item){
var verifyName=$(item).attr('name')
, verifyType=$(item).attr('type')
,formElem=$(item).parents('.layui-form')//获取当前所在的form元素如果存在的话
,verifyElem=formElem.find('input[name='+verifyName+']')//获取需要校验的元素
,isTrue= verifyElem.is(':checked')//是否命中校验
,focusElem = verifyElem.next().find('i.layui-icon');//焦点元素
if(!isTrue || !value){
//定位焦点
focusElem.css(verifyType=='radio'?{"color":"#FF5722"}:{"border-color":"#FF5722"});
//对非输入框设置焦点
focusElem.first().attr("tabIndex","1").css("outline","0").blur(function() {
focusElem.css(verifyType=='radio'?{"color":""}:{"border-color":""});
}).focus();
var reqText = verifyElem.attr('lay-reqText');
if(reqText && reqText!=''){
return reqText;
}
else{
return '必填项不能为空';
}
}
}
});
//缩略图上传
var uploadInst = upload.render({
elem: '#test1'
,url: '/admin/api/upload'
,done: function(res){
//如果上传失败
if(res.code == 1){
return layer.msg('上传失败');
}
//上传成功
$('#demo1 input').attr('value',res.data.id);
$('#demo1 img').attr('src',res.data.filepath);
}
});
//广告图上传
var uploadInst2 = upload.render({
elem: '#test2'
,url: '/admin/api/upload'
,done: function(res){
//如果上传失败
if(res.code == 1){
return layer.msg('上传失败');
}
//上传成功
var idsStr=$('#demo2 input').val();
var idsArray=[];
if(idsStr!=''){
idsArray=idsStr.split(",");
}
idsArray.push(res.data.id);
$('#demo2 input').attr('value',idsArray.join(','));
$('#demo2').append('<div class="upload-img" id="uploadImg'+res.data.id+'"><img src="'+ res.data.filepath +'"><div class="upload-close"><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delimg" data-id="'+res.data.id+'">删除</a></div>');
}
});
$('#demo2').on('click','[lay-event="delimg"]',function(){
var _id=$(this).data('id');
var idsStr=$('#demo2 input').val();
var idsArray=[];
if(idsStr!=''){
idsArray=idsStr.split(",");
}
idsArray.remove(_id);
$('#demo2 input').attr('value',idsArray.join(','));
$('#uploadImg'+_id).remove();
})
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/goods/add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
window.location.href="/admin/goods/index.html";
layer.close(index);
});
} else {
layer.msg(e.msg);
}
}
})
return false;
});
//监听返回
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/goods/index.html";
return false;
});
}
</script>
{include file="common/layui" base='base' extend="['tagpicker']" callback="init" /}
{include file="common/ueditor" id="container" name="content" width="776" height="500" toolbar="[]" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,87 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-table" style="margin-bottom:0">
<div class="layui-form-bar">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加分类</button>
</div>
<div>
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
<script type="text/html" id="switchStatus">
<input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="status" {{ d.status == 1 ? 'checked' : '' }}>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var editObj=null,ptable=null,treeGrid=null,tableId='treeTable',layer=null;
function init(layui){
var table=layui.table,form = layui.form,rightpage = layui.rightpage,layer=layui.layer;
treeGrid = layui.treeGrid;//很重要
ptable=treeGrid.render({
id:tableId
,elem: '#'+tableId
,idField:'id'
,url:'/admin/goods/cate'
,cellMinWidth: 100
,treeId:'id'//树形id字段名称
,treeUpId:'pid'//树形父id字段名称
,treeShowName:'title'//以树形式显示的字段
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field: 'sort', title: '排序', align:'center', width:80}
,{field:'title',width:240, title: '分类名称'}
,{field:'pid', title: '父级ID',width:80, align:'center'}
,{field:'keywords', title: '关键词', width:200,}
,{field:'desc', title: '描述'}
,{width:160,title: '操作', align:'center',templet: function(d){
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子分类</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
return html;
}
}
]]
,page:false
//,skin:'line'
});
//表头工具栏事件
$('.add-menu').on('click', function(){
rightpage.open("/admin/goods/cate_add",'900px');
return;
});
//操作按钮
treeGrid.on('tool('+tableId+')',function (obj) {
if (obj.event === 'add') {
rightpage.open('/admin/goods/cate_add?pid='+obj.data.id,'900px');
return;
}
if (obj.event === 'edit') {
rightpage.open('/admin/goods/cate_add?id='+obj.data.id,'900px');
return;
}
if(obj.event === 'del'){
layer.confirm('确定要删除吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url:"/admin/goods/cate_delete",
type:'post',
data:{id:obj.data.id},
success:function(res){
layer.msg(res.msg);
if(res.code == 0){
obj.del();
}
}
})
layer.close(index);
});
}
});
}
</script>
{include file="common/layui" base='base' extend="['treeGrid','rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,74 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form page-content">
<h3 class="h3-title">商品分类</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">父级分类<font>*</font></td>
<td>
<select name="pid" lay-verify="required" lay-reqText="请选择父级分类">
<option value="0">作为顶级分类</option>
{volist name=":set_recursion(get_goods_cate())" id="v"}
<option value="{$v.id}" {eq name="pid" value="$v.id"}selected=""{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">分类名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入分类名称" lay-reqText="请输入分类名称" class="layui-input" {notempty name="$cate.title" }value="{$cate.title}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" value="0" autocomplete="off" class="layui-input" {notempty name="$cate.sort" }value="{$cate.sort}" {/notempty}>
</td>
<td class="layui-td-gray">关键词</td>
<td>
<input type="text" name="keywords" placeholder="请输入关键词,用“,”隔开,可空" autocomplete="off" class="layui-input" {notempty name="$cate.keywords" }value="{$cate.keywords}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray">描述</td>
<td colspan="3"><textarea name="desc" placeholder="请输入描述,可空" class="layui-textarea">{notempty name="$cate.desc" }{$cate.desc}{/notempty}</textarea></td>
</tr>
</table>
<div style="padding: 10px 0">
<input type="hidden" name="id" value="{$id}" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
function init(layui){
var form = layui.form
,layer = layui.layer;
//监听提交
form.on('submit(webform)', function(data){
$.ajax({
url:"/admin/goods/cate_add",
type:'post',
data:data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
setTimeout(function(){
parent.location.reload();
},1000);
}
}
})
return false;
});
}
</script>
{include file="common/layui" base='base' extend="[]" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,292 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<style>
.upload-img {
width:100px;
height:120px;
overflow:hidden;
position:relative;
border:1px solid #eee;
padding:1px;
margin:5px;
float:left;
}
.upload-close{
position:absolute;
top:1px;
right:1px;
}
</style>
<form class="layui-form body-table">
<div class="layui-form-bar" style="padding-bottom:0">
<h3 class="h3-title">编辑商品</h3>
</div>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">商品标题 <span style="color: red">*</span></td>
<td colspan="3"><input type="text" name="title" lay-verify="required" lay-reqText="请输入商品标题" placeholder="请输入商品标题" class="layui-input" value="{$goods.title}"></td>
<td class="layui-td-gray2">状态 <span style="color: red">*</span></td>
<td>
<input type="radio" name="status" value="1" title="正常" {eq name="$goods.status" value="1"}checked{/eq}>
<input type="radio" name="status" value="0" title="下架" {eq name="$goods.status" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">关键字 <span style="color: red">*</span></td>
<td colspan="3">
<input type="text" id="keyword_name" name="keyword_names" lay-verify="required" lay-reqText="请选择关键字" placeholder="请选择关键字" class="layui-input" value="{$goods.keyword_names}" readonly>
<input type="hidden" id="keyword_id" name="keyword_ids" value="{$goods.keyword_ids}">
</td>
<td class="layui-td-gray2">商品分类<span style="color: red">*</span></td>
<td>
<select name="cate_id" lay-verify="required" lay-reqText="请选择商品分类">
<option value="">请选择商品分类</option>
{volist name=":set_recursion(get_goods_cate())" id="v"}
<option value="{$v.id}" {eq name="$goods.cate_id" value="$v.id"}selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray2">商品卖点 <span style="color: red">*</span></td>
<td colspan="3">
<input type="text" name="tips" lay-verify="required" lay-reqText="请输入商品卖点" placeholder="一句话描述商品卖点30字以内" value="{$goods.tips}" class="layui-input">
</td>
<td class="layui-td-gray2" rowspan="3">缩略图 <span style="color: red">*</span></td>
<td rowspan="3" style="vertical-align:top">
<div class="layui-upload" style="text-align:center;">
<button type="button" class="layui-btn layui-btn-sm" id="test1">上传商品封面图(尺寸750x560)</button>
<div class="layui-upload-list" id="demo1">
<img src="{$goods.thumb|get_file}" style="width:200px;max-width:200px" />
<input type="hidden" name="thumb" value="{$goods.thumb}">
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">商品简介</td>
<td colspan="3">
<textarea name="desc" placeholder="请输入商品简介200字以内" class="layui-textarea">{$goods.desc}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray2">商品标签 <span style="color: red">*</span></td>
<td colspan="3">
<input type="checkbox" name="tag_values[]" title="正品保证" lay-skin="primary" value="1" {eq name="$goods.tag1" value="1"}checked{/eq} />
<input type="checkbox" name="tag_values[]" title="一年保修" lay-skin="primary" value="2" {eq name="$goods.tag2" value="1"}checked{/eq} />
<input type="checkbox" name="tag_values[]" title="七天退换(拆封后不支持)" lay-skin="primary" value="3" {eq name="$goods.tag3" value="1"}checked{/eq}/>
<input type="checkbox" name="tag_values[]" title="赠运费险" lay-skin="primary" value="4" {eq name="$goods.tag4" value="1"}checked{/eq}/>
<input type="checkbox" name="tag_values[]" title="闪电发货" lay-skin="primary" value="5" {eq name="$goods.tag5" value="1"}checked{/eq}/>
<input type="checkbox" name="tag_values[]" title="售后无忧" lay-skin="primary" value="6" {eq name="$goods.tag6" value="1"}checked{/eq}/>
</td>
</tr>
<tr>
<td class="layui-td-gray2">市场价格 <span style="color: red">*</span></td>
<td>
<input type="text" name="base_price" lay-verify="required|number" lay-reqText="请输入市场价格" placeholder="请输入市场价格" class="layui-input" value="{$goods.base_price}">
</td>
<td class="layui-td-gray2">实际价格 <span style="color: red">*</span></td>
<td>
<input type="text" name="price" lay-verify="required|number" lay-reqText="请输入实际价格" placeholder="请输入实际价格" class="layui-input" value="{$goods.price}">
</td>
<td class="layui-td-gray2">是否包邮 <span style="color: red">*</span></td>
<td>
<input type="radio" name="is_mail" value="1" title="是" {eq name="$goods.is_mail" value="1"}checked{/eq}>
<input type="radio" name="is_mail" value="0" title="否" {eq name="$goods.is_mail" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">首页显示</td>
<td>
<input type="radio" name="is_home" value="1" title="是" {eq name="$goods.is_home" value="1"}checked{/eq}>
<input type="radio" name="is_home" value="0" title="否" {eq name="$goods.is_home" value="0"}checked{/eq}>
</td>
<td class="layui-td-gray2">属性</td>
<td>
<select name="type">
<option value="">请选择属性</option>
<option value="1" {eq name="$goods.type" value="1"}selected{/eq}>精华</option>
<option value="2" {eq name="$goods.type" value="2"}selected{/eq}>热门</option>
<option value="3" {eq name="$goods.type" value="3"}selected{/eq}>推荐</option>
</select>
</td>
<td class="layui-td-gray2">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" lay-verify="number" class="layui-input" value="{$goods.sort}">
</td>
</tr>
<tr>
<td class="layui-td-gray2">商品轮播图</td>
<td colspan="5">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-sm" id="test2">上传轮播图</button>
<div class="layui-upload-list" id="demo2">
<input type="hidden" name="banner" value="{$goods.banner}">
{notempty name="goods.banner"}
{volist name="goods.banner_array" id="vo"}
<div class="upload-img" id="uploadImg{$vo}"><img src="{$vo|get_file}"><div class="upload-close"><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delimg" data-id="{$vo}">删除</a></div></div>
{/volist}
{/notempty}
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top;">商品介绍 <span style="color: red">*</span></td>
<td colspan="5">
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0">{$goods.content}</textarea>
</td>
</tr>
</table>
<div class="layui-form-item" style="padding:10px">
<input type="hidden" name="id" value="{$goods.id}">
<button class="layui-btn" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
// 查找指定的元素在数组中的位置
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) {
return i;
}
}
return -1;
};
// 通过索引删除数组元素
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
function init(layui) {
var form = layui.form
, layer = layui.layer
, tagspicker = layui.tagpicker
, upload = layui.upload;
var tags = new tagspicker({
'url': '/admin/api/get_keyword_cate',
'target': 'keyword_name',
'tag_ids': 'keyword_id',
'tag_tags': 'keyword_name',
'height': 500,
'isDiy': 1
});
//自定义验证规则
form.verify({
otherReq: function(value,item){
var verifyName=$(item).attr('name')
, verifyType=$(item).attr('type')
,formElem=$(item).parents('.layui-form')//获取当前所在的form元素如果存在的话
,verifyElem=formElem.find('input[name='+verifyName+']')//获取需要校验的元素
,isTrue= verifyElem.is(':checked')//是否命中校验
,focusElem = verifyElem.next().find('i.layui-icon');//焦点元素
if(!isTrue || !value){
//定位焦点
focusElem.css(verifyType=='radio'?{"color":"#FF5722"}:{"border-color":"#FF5722"});
//对非输入框设置焦点
focusElem.first().attr("tabIndex","1").css("outline","0").blur(function() {
focusElem.css(verifyType=='radio'?{"color":""}:{"border-color":""});
}).focus();
var reqText = verifyElem.attr('lay-reqText');
if(reqText && reqText!=''){
return reqText;
}
else{
return '必填项不能为空';
}
}
}
});
//缩略图上传
var uploadInst = upload.render({
elem: '#test1'
,url: '/admin/api/upload'
,done: function(res){
//如果上传失败
if(res.code == 1){
return layer.msg('上传失败');
}
//上传成功
$('#demo1 input').attr('value',res.data.id);
$('#demo1 img').attr('src',res.data.filepath);
}
});
//广告图上传
var uploadInst2 = upload.render({
elem: '#test2'
,url: '/admin/api/upload'
,done: function(res){
//如果上传失败
if(res.code == 1){
return layer.msg('上传失败');
}
//上传成功
var idsStr=$('#demo2 input').val();
var idsArray=[];
if(idsStr!=''){
idsArray=idsStr.split(",");
}
idsArray.push(res.data.id);
$('#demo2 input').attr('value',idsArray.join(','));
$('#demo2').append('<div class="upload-img" id="uploadImg'+res.data.id+'"><img src="'+ res.data.filepath +'"><div class="upload-close"><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delimg" data-id="'+res.data.id+'">删除</a></div>');
}
});
$('#demo2').on('click','[lay-event="delimg"]',function(){
var _id=$(this).data('id');
var idsStr=$('#demo2 input').val();
var idsArray=[];
if(idsStr!=''){
idsArray=idsStr.split(",");
}
idsArray.remove(_id);
$('#demo2 input').attr('value',idsArray.join(','));
$('#uploadImg'+_id).remove();
})
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/goods/add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
window.location.href="/admin/goods/index.html";
layer.close(index);
});
} else {
layer.msg(e.msg);
}
}
})
return false;
});
//监听返回
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/goods/index.html";
return false;
});
}
</script>
{include file="common/layui" base='base' extend="['tagpicker']" use="['upload','form','laydate','table','tagpicker']" callback="init" /}
{include file="common/ueditor" id="container" name="m_content" width="776" height="500" toolbar="[]" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,148 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline">
<select name="cate_id">
<option value="">请选择商品分类</option>
{volist name=":set_recursion(get_goods_cate())" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="ID/标题/分类/描述/内容" class="layui-input" autocomplete="off" />
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="status">
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="is_home">
<i class="layui-icon {{# if(d.is_home == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" title="添加文章" href="/admin/goods/add">+ 添加商品</a>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/goods/add?id={{d.id}}">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
function init(layui) {
var TAB = parent.layui.tab,
table = layui.table,
form = layui.form;
var tableIns = table.render({
elem: '#test',
title: '商品列表',
toolbar: '#toolbarDemo',
url: '/admin/goods/index', //数据接口
page: true, //开启分页
limit: 20,
cols: [
[ //表头
{
field: 'id',
title: '编号',
align: 'center',
width: 80
}, {
field: 'sort',
title: '排序',
align: 'center',
width: 80
}, {
field: 'cate_title',
title: '分类',
width: 200
}, {
field: 'title',
title: '标题'
},{
field: 'base_price',
title: '市场价格',
align: 'center',
width: 100
},{
field: 'price',
title: '实际价格',
align: 'center',
width: 100
}, {
field: 'status',
title: '状态',
toolbar: '#status',
align: 'center',
width: 66
}, {
field: 'is_home',
title: '首页显示',
toolbar: '#is_home',
align: 'center',
width: 90
}, {
field: 'right',
title: '操作',
toolbar: '#barDemo',
width: 100,
align: 'center'
}
]
]
});
//监听行工具事件
table.on('tool(test)', function(obj) {
var data = obj.data;
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', {
icon: 3,
title: '提示'
}, function(index) {
$.ajax({
url: "/admin/goods/delete",
data: {
id: data.id
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
})
layer.close(index);
});
}
});
//监听搜索提交
form.on('submit(webform)', function(data) {
tableIns.reload({
where: {
keywords: data.field.keywords,
cate_id: data.field.cate_id
},
page: {
curr: 1
}
});
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -31,9 +31,9 @@
</ul>
</div>
<div class="layui-side ittab-bg-gray">
<div class="ittab-menulist">
<div class="ittab-menulist-top">
<div class="layui-side menulist-bg-gray">
<div class="menulist">
<div class="menulist-top">
<a href="/admin/index" title="返回系统首页" style="background-color: #E94335"><i
class="layui-icon layui-icon-windows"></i></a><a href="javascript:;" title="修改个人信息"
style="background-color:#fbbc05" data-id="10000" data-title="修改个人信息"
@ -44,46 +44,38 @@
class="layui-icon layui-icon-password"></i></a><a href="/home/index" title="门户首页" style="background-color:#4285f4" target="_blank"><i
class="layui-icon layui-icon-home"></i></a>
</div>
<div class="ittab-menulist-1">
<ul class="layui-nav layui-nav-tree layui-inline" lay-shrink="all">
{foreach name="menu" item="a"}
<div class="ittab-menulist-2"><i class="iconfont {$a.icon}"></i> {$a.title}</div>
{notempty name="$a.list"}
<div class="ittab-menulist-3">
<ul>
{foreach name="$a.list" item="b"}
{empty name="$b.list"}
<li data-id="{$b.id}" data-title="{$b.title}" data-src="{:url($b.src)}"
class="site-menu-active"><span>{$b.title}</span></li>
{else /}
<li class="ittab-menulist-2">{$b.title}<i class="layui-icon layui-icon-triangle-r"></i></li>
<div class="ittab-menulist-3 tab-menulist-4">
<ul>
{foreach name="$b.list" item="c"}
{empty name="$c.list"}
<li data-id="{$c.id}" data-title="{$c.title}" data-src="{:url($c.src)}"
class="site-menu-active"><span>{$c.title}</span></li>
{else /}
<li class="ittab-menulist-2">{$c.title}<i
class="layui-icon layui-icon-triangle-r"></i></li>
<div class="ittab-menulist-3 tab-menulist-5">
<ul>
{foreach name="$c.list" item="d"}
<li data-id="{$d.id}" data-title="{$d.title}" data-src="{:url($d.src)}"
class="site-menu-active"><span>{$d.title}</span></li>
{/foreach}
</ul>
</div>
{/empty}
{/foreach}
</ul>
</div>
{/empty}
{/foreach}
</ul>
</div>
{/notempty}
<li class="layui-nav-item">
<a href="javascript:;" class="menu-active" data-id="{$a.id}" data-title="{$a.title}" data-src="/{$a.src}"><i class="iconfont {$a.icon}"></i> {$a.title}</a>
{notempty name="$a.list"}
<dl class="layui-nav-child">
{foreach name="$a.list" item="b"}
<dd>
<a href="javascript:;" class="menu-active menu-b" data-id="{$b.id}" data-title="{$b.title}" data-src="/{$b.src}">{$b.title}</a>
{notempty name="$b.list"}
<dl class="layui-nav-child">
{foreach name="$b.list" item="c"}
<dd>
<a href="javascript:;" class="menu-active menu-c" data-id="{$c.id}" data-title="{$c.title}" data-src="/{$c.src}">{$c.title}</a>
{notempty name="$c.list"}
<dl class="layui-nav-child">
{foreach name="$c.list" item="d"}
<dd><a href="javascript:;" class="menu-active menu-d" data-id="{$d.id}" data-title="{$d.title}" data-src="/{$d.src}">{$d.title}</a></dd>
{/foreach}
</dl>
{/notempty}
</dd>
{/foreach}
</dl>
{/notempty}
</dd>
{/foreach}
</dl>
{/notempty}
</li>
{/foreach}
</div>
</ul>
</div>
</div>

View File

@ -5,7 +5,7 @@
.table-title {
font-size: 18px;
font-weight: 800;
padding: 15px 0 5px 15px;
padding: 15px 15px 0;
}
.panel-num table {
width: 100%;
@ -51,7 +51,6 @@
position: absolute;
bottom: 0;
left: 0;
background: linear-gradient(rgba(225, 225, 225, 0), rgba(225, 225, 225, .9));
}
.panel-more a {
@ -86,7 +85,7 @@
<div class="num-num">0</div>
</td>
<td>
<div class="num-title"></div>
<div class="num-title"></div>
<div class="num-num">0</div>
</td>
</tr>
@ -94,13 +93,13 @@
</div>
<div class="layui-card">
<div class="table-title">注册用户</div>
<div style="padding: 0 15px 5px;">
<div style="padding: 15px;">
<table id="UserList" lay-filter="UserList" class="layui-hide"></table>
</div>
</div>
<div class="layui-card">
<div class="table-title">文章列表</div>
<div style="padding: 0 15px 5px;">
<div style="padding: 15px;">
<table id="Article" lay-filter="Article" class="layui-hide" style="margin-top:0"></table>
</div>
</div>

View File

@ -1,7 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">关键字</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">关键字名称<font>*</font>
@ -12,7 +13,7 @@
class="layui-input" style="max-width: 360px;" {notempty name="$keywords.title"}
value="{$keywords.title}" {/notempty}>
</td>
<td class="layui-td-gray2">排序</td>
<td class="layui-td-gray">排序</td>
<td><input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input"
style="max-width: 360px;" {notempty name="$keywords.sort" }value="{$keywords.sort}" {/notempty}>
</td>
@ -36,7 +37,6 @@
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -52,27 +52,21 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/keywords/post_submit",
url: "/admin/keywords/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="关键字名称" class="layui-input" autocomplete="off" />
</div>
@ -16,7 +16,7 @@
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/keywords/add">+ 添加关键字</a>
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加关键字</button>
</div>
</script>
{/block}
@ -25,11 +25,13 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '关键字列表',
toolbar: '#toolbarDemo',
@ -63,7 +65,7 @@
title: '操作',
align: 'center',
templet: function (d) {
var html = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/keywords/add?id=' + d.id + '">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>';
var html = '<div class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></div>';
return html;
}
}]
@ -87,8 +89,20 @@
return false;
});
//删除
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/keywords/add","900px");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
rightpage.open('/admin/keywords/add?id='+obj.data.id,"900px");
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', {
icon: 3,
@ -113,6 +127,6 @@
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,165 @@
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-table">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm addNew" type="button">+ 添加用户等级</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
function init(layui){
var table=layui.table,
layer=layui.layer;
var tableIns = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,title:'用户等级列表'
,url: "/admin/level/index"
,page: false //开启分页
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '等级名称',width:120, align:'center'}
,{field:'desc',title: '等级描述'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span>正常</span>';
var html2='<span style="color:#FF5722">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:100,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
addExpense(obj.data.id,obj.data.title,obj.data.desc);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该等级吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url: "/admin/level/disable",
type: 'post',
data: {
id: obj.data.id,
status: 0
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
parent.location.reload();
}
}
})
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该等级吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url: "/admin/level/disable",
type: 'post',
data: {
id: obj.data.id,
status: 1
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
parent.location.reload();
}
}
})
layer.close(index);
});
}
});
$('.body-table').on('click','.addNew',function(){
addExpense(0,'','');
});
function addExpense(id,title,desc){
var biaoti = '新增等级';
if(id>0){
biaoti = '编辑等级';
}
layer.open({
type: 1
,title: biaoti
,area: '512px;'
,id: 'LAY_module' //设定一个id防止重复弹出
,btn: ['确定', '取消']
,btnAlign: 'c'
,content: '<div style="padding-top:15px;">\
<div class="layui-form-item">\
<label class="layui-form-label">等级名称</label>\
<div class="layui-input-inline" style="width:360px;">\
<input type="hidden" name="id" value="'+id+'">\
<input type="text" name="title" autocomplete="off" value="'+title+'" placeholder="请输入模块名称" class="layui-input">\
</div>\
</div>\
<div class="layui-form-item">\
<label class="layui-form-label">等级描述</label>\
<div class="layui-input-inline" style="width:360px;">\
<textarea name="desc" placeholder="请输入等级描述100字以内" class="layui-textarea">'+desc+'</textarea>\
</div>\
</div>\
</div>'
,yes: function(index){
let id = $('#LAY_module').find('[name="id"]').val();
let title = $('#LAY_module').find('[name="title"]').val();
let desc = $('#LAY_module').find('[name="desc"]').val();
$.ajax({
url: "/admin/level/add",
type: 'post',
data: {
id: id,
title: title,
desc: desc
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.close(index);
tableIns.reload();
}
}
})
}
,btn2: function(){
layer.closeAll();
}
});
}
}
</script>
{include file="common/layui" base='base' extend="[]" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,20 +1,17 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="昵称/操作节点名称/操作数据ID" class="layui-input" autocomplete="off" />
<input type="text" name="keywords" placeholder="昵称/操作数据id/操作描述" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline">
<select name="title_cate">
<select name="action">
<option value="">请选择类型</option>
<option value="登录">登录操作</option>
<option value="上传">上传操作</option>
<option value="新增">新增操作</option>
<option value="编辑">编辑操作</option>
<option value="查看">查看操作</option>
<option value="删除">删除操作</option>
{volist name="$type_action" id="vo"}
<option value="{$vo}">{$vo}</option>
{/volist}
</select>
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
@ -35,7 +32,7 @@
elem: '#test',
title: '操作日志列表',
toolbar: '#toolbarDemo',
url: '/admin/admin/log', //数据接口
url: "/admin/log/index", //数据接口
page: true, //开启分页
limit: 20,
cols: [
@ -46,9 +43,10 @@
align: 'center',
width: 90
}, {
field: 'title',
field: 'action',
title: '操作',
width: 150
align: 'center',
width: 80
}, {
field: 'content',
title: '操作描述',
@ -87,7 +85,7 @@
tableIns.reload({
where: {
keywords: data.field.keywords,
title_cate: data.field.title_cate
action: data.field.action
},
page: {
curr: 1

View File

@ -1,89 +0,0 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">父级菜单<font>*</font></td>
<td>
<input type="hidden" name="id" value="0">
<select name="pid" lay-verify="required" lay-reqText="请选择父级菜单">
<option value="0">作为顶级菜单</option>
{volist name=":set_recursion(get_admin_menu())" id="v"}
<option value="{$v.id}" {eq name="pid" value="$v.id" }selected="" {/eq}>{$v.title} </option>
{/volist}
</select>
</td>
<td class="layui-td-gray2">菜单名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入菜单名称" lay-reqText="请输入菜单名称" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">菜单路径</td>
<td>
<input type="text" name="src" placeholder="请输入菜单路径,可空" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">菜单参数</td>
<td>
<input type="text" name="param" placeholder="请输入菜单参数,可空" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">菜单图标</td>
<td>
<input type="text" name="icon" placeholder="请输入图标样式,可空" autocomplete="off" class="layui-input">
</td>
<td colspan="2">
icon-jichuguanli<a href="{__LAYUI__}/font/extend/demo_index.html" target="_blank" style="margin-left:10px; color:#007AFF">[点击查看图标]</a>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
function init(layui) {
var form = layui.form,
layer = layui.layer;
//监听提交
form.on('submit(webform)', function(data) {
$.ajax({
url: "/admin/menu/post_submit",
type: 'post',
data: data.field,
success: function(e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', {
icon: 3,
title: '提示'
}, function(index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function() {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,101 +0,0 @@
{extend name="common/base"/}
{block name="style"}
<style>
html,
body {
height: calc(100% - 20px);
}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="body-content" style="height: 100%">
<div style="height:39px;">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/menu/add">+ 添加菜单</a><span style="color:#999;margin-left:20px">点击表格内容可编辑</span>
</div>
<div style="height: calc(100% - 30px)">
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var editObj = null, ptable = null, treeGrid = null, tableId = 'treeTable', layer = null;
function init(layui) {
var treeGrid = layui.treeGrid;//很重要
layer = layui.layer;
ptable = treeGrid.render({
id: tableId
, elem: '#' + tableId
, idField: 'id'
, url: '/admin/menu/index'
, cellMinWidth: 100
, treeId: 'id'//树形id字段名称
, treeUpId: 'pid'//树形父id字段名称
, treeShowName: 'title'//以树形式显示的字段
, height: 'full-0'
, cols: [[
{ field: 'sort', width: 80, title: '排序', edit: "text", align: 'center' }
, { field: 'id', width: 80, title: 'ID号', align: 'center' }
, { field: 'title', edit: 'text', width: 240, title: '名称', edit: "text" }
, { field: 'icon', edit: 'text', width: 180, title: '图标<a href="{__LAYUI__}/font/extend/demo_index.html" target="_blank" style="color:#007AFF">[图标选择]</a>', edit: "text" }
, { field: 'pid', title: '父级ID', edit: "text", width: 80, align: 'center' }
, { field: 'src', title: '路径', edit: "text" }
, { width: 100, title: '操作', align: 'center', templet: function (d) {
var html = '<a class="layui-btn layui-btn-normal layui-btn-xs" href="/admin/menu/add?pid=' + d.id + '">添加</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
return html;
}
}
]]
, page: false
//,skin:'line'
});
//单元格编辑
treeGrid.on('edit(' + tableId + ')', function (obj) {
layer.confirm('确定要提交修改吗?', { icon: 3, title: '提示' }, function (index) {
$.ajax({
url: "/admin/menu/post_submit",
type: 'post',
data: { id: obj.data.id, field: obj.field, value: obj.value },
success: function (e) {
layer.msg(e.msg);
if(e.code == 0){
setTimeout(function(){
location.reload()
},2000)
}
}
})
layer.close(index);
});
});
//删除
treeGrid.on('tool(' + tableId + ')', function (obj) {
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
$.ajax({
url: "/admin/menu/delete",
type: 'post',
data: { id: obj.data.id },
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
})
layer.close(index);
});
}
});
}
</script>
{include file="common/layui" base="base" extend="['treeGrid']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -0,0 +1,179 @@
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-table">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm addNew" type="button">+ 添加功能模块</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
function init(layui){
var table=layui.table,
layer=layui.layer;
var tableIns = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,title:'功能模块列表'
,url: "/admin/module/index"
,page: false //开启分页
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '模块名称'}
,{field:'name',title: '模块所在目录',templet: function(d){
var html='app/'+d.name;
return html;
}}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span>正常</span>';
var html2='<span style="color:#FF5722">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{field:'type', title: '类型',width:120,align:'center',templet: function(d){
var html1='<span>系统模块</span>';
var html2='<span style="color:#FF5722">普通模块</span>';
if(d.type==1){
return html1;
}
else{
return html2;
}
}}
,{width:100,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
addExpense(obj.data.id,obj.data.title,obj.data.name);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该模块吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url: "/admin/module/disable",
type: 'post',
data: {
id: obj.data.id,
status: 0
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
parent.location.reload();
}
}
})
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该模块吗?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url: "/admin/module/disable",
type: 'post',
data: {
id: obj.data.id,
status: 1
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
parent.location.reload();
}
}
})
layer.close(index);
});
}
});
$('.body-table').on('click','.addNew',function(){
addExpense(0,'','');
});
function addExpense(id,title,name){
var biaoti = '新增模块';
if(id>0){
biaoti = '编辑模块';
}
layer.open({
type: 1
,title: biaoti
,area: '398px;'
,id: 'LAY_module' //设定一个id防止重复弹出
,btn: ['确定', '取消']
,btnAlign: 'c'
,content: '<div style="padding-top:15px;">\
<div class="layui-form-item">\
<label class="layui-form-label">模块名称</label>\
<div class="layui-input-inline">\
<input type="hidden" name="id" value="'+id+'">\
<input type="text" name="title" autocomplete="off" value="'+title+'" placeholder="请输入模块名称" class="layui-input">\
</div>\
</div>\
<div class="layui-form-item">\
<label class="layui-form-label">所在目录</label>\
<div class="layui-input-inline">\
<input type="text" name="name" autocomplete="off" value="'+name+'" placeholder="请输入至少2个大写字符" class="layui-input">\
</div>\
</div>\
<div style="text-align:center;color:red">目录如:"app/admin",只需要填写"admin"就可以了。</div>\
</div>'
,yes: function(index){
let id = $('#LAY_module').find('[name="id"]').val();
let title = $('#LAY_module').find('[name="title"]').val();
let name = $('#LAY_module').find('[name="name"]').val();
$.ajax({
url: "/admin/module/add",
type: 'post',
data: {
id: id,
title: title,
name: name
},
success: function(e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.close(index);
tableIns.reload();
}
}
})
}
,btn2: function(){
layer.closeAll();
}
});
}
}
</script>
{include file="common/layui" base='base' extend="[]" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,27 +1,22 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">导航组</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">标题<font>*</font>
</td>
<td class="layui-td-gray">标题<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入标题"
lay-reqText="请输入标题" class="layui-input" {notempty name="$nav.title" }value="{$nav.title}"
{/notempty}>
</td>
<td class="layui-td-gray2">标识<font>*</font>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入标题" lay-reqText="请输入标题" class="layui-input" {notempty name="$nav.title" }value="{$nav.title}" {/notempty}>
</td>
<td class="layui-td-gray">标识<font>*</font></td>
<td>
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标识"
lay-reqText="请输入标识" class="layui-input" {notempty name="$nav.name" }value="{$nav.name}" {/notempty}>
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标识" lay-reqText="请输入标识" class="layui-input" {notempty name="$nav.name" }value="{$nav.name}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">状态<font>*</font>
</td>
<td class="layui-td-gray">状态<font>*</font></td>
<td colspan="3">
{if condition="$id eq 0"}
<input type="radio" name="status" value="1" title="正常" checked>
@ -33,15 +28,13 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">备注</td>
<td colspan="3"><textarea name="desc" placeholder="请输入备注"
class="layui-textarea">{notempty name="$nav.desc" }{$nav.desc}{/notempty}</textarea></td>
<td class="layui-td-gray">备注</td>
<td colspan="3"><textarea name="desc" placeholder="请输入备注" class="layui-textarea">{notempty name="$nav.desc" }{$nav.desc}{/notempty}</textarea></td>
</tr>
</table>
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -57,30 +50,21 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/nav/post_submit",
url: "/admin/nav/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,10 +1,10 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" required lay-verify="required" placeholder="ID/标题/标识/备注" class="layui-input" />
<input type="text" name="keywords" placeholder="ID/标题/标识/备注" class="layui-input" />
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
@ -15,12 +15,12 @@
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/nav/add">+ 添加导航组</a>
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加导航组</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/nav/add?id={{d.id}}">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/nav/nav_info?id={{d.id}}">管理导航</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/nav/nav_info?id={{d.id}}">管理导航</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
</script>
{/block}
<!-- /主体 -->
@ -28,11 +28,13 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
toolbar: '#toolbarDemo',
url: '/admin/nav/index', //数据接口
@ -74,10 +76,20 @@
]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/nav/add","900px");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'edit') {
rightpage.open('/admin/nav/add?id='+obj.data.id,"900px");
return;
}
if (obj.event === 'del') {
layer.confirm('真的删除该导航组吗?', {
icon: 3,
@ -102,20 +114,14 @@
//监听搜索提交
form.on('submit(webform)', function (data) {
if (data.field.keywords) {
tableIns.reload({
where: {
keywords: data.field.keywords
},
page: {
curr: 1
}
});
}
tableIns.reload({
where: { keywords: data.field.keywords },
page: { curr: 1 }
});
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,21 +1,12 @@
{extend name="common/base"/}
<!-- 样式 -->
{block name="style"}
<style>
html,
body {
height: calc(100% - 20px);
}
</style>
{/block}
<!-- /样式 -->
<!-- 主体 -->
{block name="body"}
<div class="body-content" style="height: 100%">
<div>
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/nav/nav_info_add?nid={$nav_id}">+ 添加导航</a>
<div class="body-table" style="margin-bottom:0;">
<div class="layui-form-bar">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加导航</button>
<button class="layui-btn layui-btn-primary layui-btn-sm add-back">返回</button>
</div>
<div style="height: calc(100% - 30px);margin-top: 10px;">
<div>
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
@ -31,17 +22,13 @@
<!-- 脚本 -->
{block name="script"}
<script>
var nid = {$nav_id},
editObj = null,
ptable = null,
treeGrid = null,
tableId = 'treeTable',
layer = null;
var nid = {$nav_id},ptable = null, treeGrid = null,rightpage=null, layer = null, tableId = "treeTable";
function init(layui) {
var table = layui.table;
treeGrid = layui.treeGrid; //很重要
treeGrid = layui.treeGrid;
layer = layui.layer;
rightpage = layui.rightpage;
ptable = treeGrid.render({
id: tableId,
elem: '#' + tableId,
@ -90,24 +77,42 @@
align: 'center',
width: 60
}, {
width: 180,
width: 160,
title: '操作',
align: 'center',
templet: function (d) {
var html = '';
var addBtn =
'<a class="layui-btn layui-btn-normal layui-btn-xs" href="/admin/nav/nav_info_add?nid={$nav_id}&pid=' + d.id +
'">添加子导航</a><a class="layui-btn layui-btn-xs" href="/admin/nav/nav_info_add?nid={$nav_id}&id=' + d.id +
'">编辑</a>';
var delBtn = '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
return addBtn + delBtn;
'<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子导航</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
return addBtn;
}
}]
],
page: false
});
//表头工具栏事件
$('.add-menu').on('click',function(){
rightpage.open("/admin/nav/nav_info_add?nid="+nid,'900px');
return;
});
//监听返回
$('.add-back').on('click',function () {
history.back(-1);
return false;
});
//删除
treeGrid.on('tool(' + tableId + ')', function (obj) {
if (obj.event === 'add') {
rightpage.open('/admin/nav/nav_info_add?nid='+nid+'&pid='+obj.data.id,'900px');
return;
}
if (obj.event === 'edit') {
rightpage.open('/admin/nav/nav_info_add?nid='+nid+'&id='+obj.data.id,'900px');
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', {
icon: 3,
@ -132,6 +137,6 @@
});
}
</script>
{include file="common/layui" base="base" extend="['treeGrid']" callback="init" /}
{include file="common/layui" base="base" extend="['treeGrid','rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,10 +1,11 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">导航内容</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">父级导航<font>*</font></td>
<td class="layui-td-gray">父级导航<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$id}"/>
<input type="hidden" name="nav_id" value="{$nav_id}"/>
@ -15,28 +16,26 @@
{/volist}
</select>
</td>
<td class="layui-td-gray2">排序</td>
<td>
<td class="layui-td-gray">排序</td><td>
<input type="text" name="sort" autocomplete="off" class="layui-input" {notempty name="$nav.sort" }value="{$nav.sort}"{else/}value="0" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">导航名称<font>*</font></td>
<td class="layui-td-gray">导航名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入名称" lay-reqText="请输入名称" class="layui-input" {notempty name="$nav.title" }value="{$nav.title}"{/notempty}>
</td>
<td class="layui-td-gray2">网址链接</td>
<td class="layui-td-gray">网址链接</td>
<td>
<input type="text" name="src" placeholder="请输入导航网址链接,可空" autocomplete="off" class="layui-input" {notempty name="$nav.src" }value="{$nav.src}"{/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">参数</td>
<td class="layui-td-gray">参数</td>
<td>
<input type="text" name="param" placeholder="请输入导航参数,可空" autocomplete="off" class="layui-input" {notempty name="$nav.param" }value="{$nav.param}"{/notempty}>
</td>
<td class="layui-td-gray2">是否新窗口打开
</td>
<td class="layui-td-gray2">是否新窗口打开</td>
<td>
{if condition="$id eq 0"}
<input type="radio" name="target" value="0" title="否" checked>
@ -48,8 +47,7 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">状态<font>*</font>
</td>
<td class="layui-td-gray2">状态<font>*</font></td>
<td colspan="3">
{if condition="$id eq 0"}
<input type="radio" name="status" value="1" title="正常" checked>
@ -65,7 +63,6 @@
<div style="padding: 10px 0">
<button class="layui-btn" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -81,30 +78,20 @@
//监听提交
form.on('submit(webform)', function(data) {
$.ajax({
url: "/admin/nav/nav_info_submit",
url: "/admin/nav/nav_info_add",
type: 'post',
data: data.field,
success: function(e) {
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', {
icon: 3,
title: '提示'
}, function(index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
window.setTimeout(function(){
parent.location.reload();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function() {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,14 +1,19 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<table class="layui-table layui-table-form">
<style>
.checkbox16 .layui-form-checkbox span{font-size:15px;font-weight:800;}
#rule .layui-checkbox-disabled span {color: #666666!important;}
</style>
<form class="layui-form page-content">
<h3 class="h3-title">权限角色</h3>
<table class="layui-table">
<tr>
<td class="layui-td-gray2">角色名称<font>*</font>
</td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input class="layui-input" type="text" name="title" lay-verify="required" lay-reqText="请输入角色名称" {notempty name="$role.title"
<input class="layui-input" type="text" name="title" lay-verify="required" lay-reqText="请输入角色名称" {notempty name="$role.title"
}value="{$role.title}" {/notempty} placeholder="请输入角色名称" autocomplete="off" />
</td>
<td class="layui-td-gray2">状态<font>*</font>
@ -24,45 +29,7 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top">权限配置<br>操作菜单可见</td>
<td colspan="3">
<table style="width:100%">
<tr>
<td style="text-align:left; background-color:#f8f8f8; width:160px;">选择要显示的顶级菜单 <font style="color:red"></font></td>
<td style="text-align:left; background-color:#f8f8f8;">选择要显示的子级菜单 <font style="color:red"></font></td>
</tr>
{volist name="role_menu" id="vo"}
<tr>
<td style="font-weight:800">
<input type="checkbox" name="menu[]" value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td>
<div style="padding:10px 0;">
{volist name="vo.children" key="k" id="voo"}
<div class="layui-input-inline" style="margin-right:10px; font-weight:800">
<input type="checkbox" lay-filter="menu" name="menu[]" value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:10px 0 0 28px; {if condition='$k != count($vo.children)'}margin-bottom:12px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" data-menu="{$voo.id}" name="menu[]" value="{$vooo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
{/volist}
</div>
{/notempty}
{/volist}
</div>
</td>
{/notempty}
</tr>
{/volist}
</table>
</td>
</tr>
<tr>
<td class="layui-td-gray2" style="vertical-align:top">权限配置<br>操作节点可用</td>
<td class="layui-td-gray2" style="vertical-align:top">权限配置</td>
<td colspan="3">
<table style="width:100%" id="rule">
<tr>
@ -71,18 +38,18 @@
</tr>
{volist name="role_rule" id="vo"}
<tr>
<td style="font-weight:800">
<td style="font-weight:800;">
<input type="checkbox" name="rule[]" value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td>
<div style="padding:10px 0;">
<div style="padding:0 0 0 10px;">
{volist name="vo.children" key="k" id="voo"}
<div class="layui-input-inline" style="margin-right:10px; font-weight:800">
<div class="checkbox16" style="padding:10px 0;">
<input type="checkbox" lay-filter="rule" name="rule[]" value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:10px 0 0 28px; {if condition='$k != count($vo.children)'}margin-bottom:12px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
<div style="padding:0 0 3px; {if condition='$k != count($vo.children)'}margin-bottom:3px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" data-rule="{$voo.id}" name="rule[]" value="{$vooo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
@ -110,7 +77,6 @@
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -127,17 +93,16 @@
form.on('submit(webform)', function (obj) {
console.log(obj.field);
$.ajax({
url: '/admin/role/post_submit',
url: "/admin/role/add",
data: obj.field,
type: 'post',
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
});
@ -170,15 +135,7 @@
}
form.render();//实时渲染选中和不选中的样式
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{/block}

View File

@ -1,25 +1,22 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="ID/名称/备注" class="layui-input" autocomplete="off" />
<input type="text" name="keywords" placeholder="名称/备注" class="layui-input" autocomplete="off" />
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="thumb">
<img src='{{d.thumb}}' height="25" style="border-radius: 50%;" />
</script>
<script type="text/html" id="status">
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/role/add">+ 添加管理组</a>
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加权限组</button>
</div>
</script>
{/block}
@ -28,38 +25,47 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table
, form = layui.form;
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
toolbar: '#toolbarDemo',
url: '/admin/role/index', //数据接口
url: "/admin/role/index", //数据接口
page: true, //开启分页
limit: 20,
cols: [[ //表头
{ field: 'id', title: 'ID号', align: 'center', width: 80 }
, { field: 'title', title: '名称', width: 300 }
, { field: 'title', title: '权限组名称', width: 200 }
, { field: 'desc', title: '备注' }
, { field: 'status', title: '状态', toolbar: '#status', align: 'center', width: 90 }
, { width: 160,
title: '操作',
align: 'center',
templet: function (d) {
var html = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/role/add?id=' + d.id + '">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>';
, { field: 'status', title: '状态', toolbar: '#status', align: 'center', width: 80 }
, { width: 100,title: '操作',align: 'center',templet: function (d) {
var html = '<div class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></div>';
return html;
}
}
]]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/role/add");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'edit') {
rightpage.open('/admin/role/add?id='+obj.data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该角色吗?', { icon: 3, title: '提示' }, function (index) {
layer.confirm('确定要删除该权限角色吗?', { icon: 3, title: '提示' }, function (index) {
$.ajax({
url: "/admin/role/delete",
data: { id: data.id },
@ -72,16 +78,6 @@
})
layer.close(index);
});
} else if (obj.event === 'edit') {
layer.prompt({
formType: 2
, value: data.email
}, function (value, index) {
obj.update({
email: value
});
layer.close(index);
});
}
});
@ -96,6 +92,6 @@
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,42 +1,105 @@
{extend name="common/base"/}
{extend name="common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<table class="layui-table layui-table-form">
<form class="layui-form page-content">
<h3 class="h3-title">功能菜单/节点</h3>
{if condition="$id eq 0"}
<table class="layui-table">
<tr>
<td class="layui-td-gray2">父级节点<font>*</font>
</td>
<td class="layui-td-gray2">父级菜单/节点<font>*</font></td>
<td>
<input type="hidden" name="id" value="0">
<select name="pid" lay-verify="required" lay-reqText="请选择父级节点">
<option value="0">作为顶级节点</option>
<select name="pid" lay-verify="required" lay-reqText="请选择父级菜单/节点">
<option value="0">作为顶级菜单/节点</option>
{volist name=":set_recursion(get_admin_rule())" id="v"}
<option value="{$v.id}" {eq name="pid" value="$v.id" }selected="" {/eq}>{$v.title} </option>
{/volist}
</select>
</td>
<td class="layui-td-gray2">节点名称<font>*</font>
</td>
<td class="layui-td-gray2">是否是左侧菜单<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入节点名称"
lay-reqText="请输入节点名称" class="layui-input">
<input type="radio" name="menu" value="1" title="是">
<input type="radio" name="menu" value="2" title="不是">
</td>
</tr>
<tr>
<td class="layui-td-gray2">节点验证规则</td>
<td class="layui-td-gray2">菜单/节点名称<font>*</font></td>
<td>
<input type="text" name="src" placeholder="请输入验证规则" autocomplete="off" class="layui-input">
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入菜单/节点名称" lay-reqText="请输入菜单/节点名称" class="layui-input">
</td>
<td class="layui-td-gray2">附加规则</td>
<td class="layui-td-gray2">操作日志名称<font>*</font></td>
<td>
<input type="text" name="condition" placeholder="请输入附加规则,可空" autocomplete="off" class="layui-input">
<input type="text" name="name" lay-verify="required" placeholder="请输入操作日志名称" lay-reqText="请输入操作日志名称" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">菜单/节点URL</td>
<td>
<input type="text" name="src" placeholder="请输入菜单/节点URL可空" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">排序</td>
<td>
<input type="text" name="sort" value="0" placeholder="请输入数字,越小越靠前" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray3">图标</td>
<td colspan="3">
<input type="text" name="icon" style="width:150px; display:inline" placeholder="请输入图标,可空" autocomplete="off" class="layui-input">
icon-jichuguanli<a href="{__LAYUI__}/font/extend/demo_index.html" target="_blank" style="margin-left:10px; color:#007AFF">[查看图标]</a>
</td>
</tr>
</table>
{else/}
<table class="layui-table">
<tr>
<td class="layui-td-gray2">父级菜单/节点<font>*</font></td>
<td>
<select name="pid" lay-verify="required" lay-reqText="请选择父级菜单/节点">
<option value="0">作为顶级节点</option>
{volist name=":set_recursion(get_admin_rule())" id="v"}
<option value="{$v.id}" {eq name="$detail.pid" value="$v.id" }selected="" {/eq}>{$v.title} </option>
{/volist}
</select>
</td>
<td class="layui-td-gray2">是否左侧菜单<font>*</font></td>
<td>
<input type="radio" name="menu" value="1" title="是" {eq name="$detail.menu" value="1"} checked{/eq}>
<input type="radio" name="menu" value="2" title="不是" {eq name="$detail.menu" value="2"} checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">菜单/节点名称<font>*</font></td>
<td>
<input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入菜单/节点名称" lay-reqText="请输入菜单/节点名称" class="layui-input">
</td>
<td class="layui-td-gray2">操作日志名称<font>*</font></td>
<td>
<input type="text" name="name" value="{$detail.name}" lay-verify="required" placeholder="请输入操作日志名称" lay-reqText="请输入操作日志名称" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">菜单/节点URL</td>
<td>
<input type="text" name="src" value="{$detail.src}" placeholder="请输入菜单/节点URL可空" autocomplete="off" class="layui-input">
</td>
<td class="layui-td-gray2">排序</td>
<td>
<input type="text" name="sort" value="{$detail.sort}" placeholder="请输入数字,越小越靠前" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray2">图标</td>
<td colspan="3">
<input style="width:150px; display:inline" type="text" name="icon" value="{$detail.icon}" placeholder="请输入图标,可空" autocomplete="off" class="layui-input">
icon-jichuguanli<a href="{__LAYUI__}/font/extend/demo_index.html" target="_blank" style="margin-left:10px; color:#007AFF">[查看图标]</a>
</td>
</tr>
</table>
{/if}
<div style="padding: 10px 0">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -51,31 +114,28 @@
//监听提交
form.on('submit(webform)', function (data) {
if(data.field.src!='' && data.field.module!=''){
if(data.field.src.indexOf(data.field.module.toLowerCase()+'/')!=0){
layer.msg('输入的菜单/节点URL与所属功能模块不匹配');
return false;
}
}
$.ajax({
url: "/admin/rule/post_submit",
url: "/admin/rule/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
window.setTimeout(function(){
parent.location.reload();
},1200);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,21 +1,11 @@
{extend name="common/base"/}
{block name="style"}
<style>
html,
body {
height: calc(100% - 20px);
}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="body-content" style="height: 100%">
<div style="height:39px;">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/rule/add">+ 添加节点</a><span style="color:#999;margin-left:20px">点击表格内容可编辑</span>
<div class="body-table" style="margin-bottom:0;">
<div class="layui-form-bar">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加菜单/节点</button>
</div>
<div style="height: calc(100% - 30px)">
<div>
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
@ -25,57 +15,60 @@
<!-- 脚本 -->
{block name="script"}
<script>
var editObj = null, ptable = null, treeGrid = null, tableId = 'treeTable', layer = null;
var ptable = null, treeGrid = null,rightpage=null, layer = null, tableId = "treeTable";
function init(layui) {
var table = layui.table;
treeGrid = layui.treeGrid;//很重要
treeGrid = layui.treeGrid;
rightpage = layui.rightpage;
layer = layui.layer;
ptable = treeGrid.render({
id: tableId
, elem: '#' + tableId
, idField: 'id'
, url: '/admin/rule/index'
, cellMinWidth: 100
, url: "/admin/rule/index"
, cellMinWidth: 80
, treeId: 'id'//树形id字段名称
, treeUpId: 'pid'//树形父id字段名称
, treeShowName: 'title'//以树形式显示的字段
, cols: [[
{ field: 'id', width: 80, title: 'ID号', align: 'center' }
, { field: 'title', edit: 'text', width: 300, title: '名称', edit: "text" }
, { field: 'pid', title: '父级ID', edit: "text", width: 80, align: 'center' }
, { field: 'src', title: '规则', edit: "text" }
, {
width: 100, title: '操作', align: 'center'
{ field: 'id', width: 80, title: 'ID号', align: 'center'}
, { field: 'sort', width: 80, title: '排序',align: 'center'}
, { field: 'title', width: 160, title: '菜单/节点名称'}
, { field: 'pid', title: '父ID', width: 80, align: 'center' }
, { field: 'src', title: 'URL链接'}
, { field: 'menu', width: 100, title: '是否是菜单',align: 'center', templet: function (d) {
var html = '<span style="color:#fbbc05"></span>';
if(d.menu=='1'){
html = '<span style="color:#12bb37"></span>';
}
return html;
}
}
, {field: 'name', width: 110, title: '操作日志名称',align: 'center'}
, {width: 188, title: '操作', align: 'center'
, templet: function (d) {
var html = '<a class="layui-btn layui-btn-normal layui-btn-xs" href="/admin/rule/add?pid=' + d.id + '">添加</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">添加子菜单/节点</button><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button>';
return html;
}
}
]]
, page: false
//,skin:'line'
});
//单元格编辑
treeGrid.on('edit(' + tableId + ')', function (obj) {
layer.confirm('确定要提交修改吗?', { icon: 3, title: '提示' }, function (index) {
$.ajax({
url: "/admin/rule/post_submit",
type: 'post',
data: { id: obj.data.id, field: obj.field, value: obj.value },
success: function (e) {
layer.msg(e.msg);
if(e.code == 0){
setTimeout(function(){
location.reload()
},2000)
}
}
})
layer.close(index);
});
//表头工具栏事件
$('.add-menu').on('click',function(){
rightpage.open("/admin/rule/add",'900px');
return;
});
//删除
//操作按钮
treeGrid.on('tool(' + tableId + ')', function (obj) {
if (obj.event === 'add') {
rightpage.open('/admin/rule/add?pid='+obj.data.id,'900px');
return;
}
if (obj.event === 'edit') {
rightpage.open('/admin/rule/add?id='+obj.data.id,'900px');
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
$.ajax({
@ -96,6 +89,6 @@
}
</script>
{include file="common/layui" base="base" extend="['treeGrid']" callback="init" /}
{include file="common/layui" base="base" extend="['treeGrid','rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="关键字名称" class="layui-input" autocomplete="off" />
</div>

View File

@ -1,28 +1,24 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">网站地图分类</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">分类名<font>*</font>
</td>
<td class="layui-td-gray">分类名称<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入分类名" lay-reqText="请输入分类名"
class="layui-input" {notempty name="$cate.name" }value="{$cate.name}" {/notempty}>
</td>
<td class="layui-td-gray2">排序
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入分类名" lay-reqText="请输入分类名" class="layui-input" {notempty name="$cate.name" }value="{$cate.name}" {/notempty}>
</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" autocomplete="off" placeholder="请输入排序"
class="layui-input" {notempty name="$cate.sort" }value="{$cate.sort}" {else/} value="0"{/notempty}>
<input type="text" name="sort" autocomplete="off" placeholder="请输入排序" class="layui-input" {notempty name="$cate.sort" }value="{$cate.sort}" {else/} value="0"{/notempty}>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -33,36 +29,26 @@
<script>
function init(layui) {
var form = layui.form,
layer = layui.layer,
upload = layui.upload;
layer = layui.layer;
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/sitemap/post_submit",
url: "/admin/sitemap/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="ID/分类名" class="layui-input" />
</div>
@ -14,12 +14,12 @@
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/sitemap/add">+ 添加网站地图分类</a>
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加网站地图分类</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/sitemap/add?id={{d.id}}">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/sitemap/sitemap_info?id={{d.id}}">网站地图详情</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/sitemap/sitemap_info?id={{d.id}}">网站地图详情</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
</script>
{/block}
<!-- /主体 -->
@ -27,13 +27,15 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '网站地图列表',
title: '网站地图分类列表',
toolbar: '#toolbarDemo',
url: '/admin/sitemap/index', //数据接口
page: true, //开启分页
@ -64,10 +66,20 @@
]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/sitemap/add","900px");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'edit') {
rightpage.open('/admin/sitemap/add?id='+obj.data.id,"900px");
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该数据吗?', {
icon: 3,
@ -104,6 +116,6 @@
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,24 +1,21 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div class="body-table" style="margin-bottom:0;">
<table class="layui-hide" id="test" lay-filter="test"></table>
<div>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</div>
<script type="text/html" id="status">
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/sitemap/sitemap_info_add?cid={$sitemap_cate_id}">+ 添加网站地图</a>
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加网站地图</button>
<button class="layui-btn layui-btn-primary layui-btn-sm add-back">返回</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/sitemap/sitemap_info_add?id={{d.id}}">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
<div class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></div>
</script>
{/block}
<!-- /主体 -->
@ -26,12 +23,13 @@
<!-- 脚本 -->
{block name="script"}
<script>
var sitemap_cate_id = '{$sitemap_cate_id}';
var sitemap_cate_id = '{$sitemap_cate_id}',tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '网站地图列表',
toolbar: '#toolbarDemo',
@ -73,9 +71,24 @@
]
});
//表头工具栏事件
$('.add-menu').on('click',function(){
rightpage.open("/admin/sitemap/sitemap_info_add?cid="+sitemap_cate_id,'900px');
return;
});
//监听返回
$('.add-back').on('click',function () {
history.back(-1);
return false;
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
rightpage.open('/admin/sitemap/sitemap_info_add?id='+obj.data.id,'900px');
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该数据吗?', {
icon: 3,
@ -97,14 +110,8 @@
});
}
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,61 +1,46 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">网站地图内容</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">标题<font>*</font>
</td>
<td class="layui-td-gray">标题<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标题"
lay-reqText="请输入标题" class="layui-input" {notempty name="$sitemap.name" }value="{$sitemap.name}"
{/notempty}>
<input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标题" lay-reqText="请输入标题" class="layui-input" {notempty name="$sitemap.name" }value="{$sitemap.name}" {/notempty}>
</td>
<td class="layui-td-gray2">排序</td>
<td><input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" {notempty
name="$sitemap.sort" }value="{$sitemap.sort}" {/notempty}></td>
<td class="layui-td-gray">排序</td>
<td><input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" {notempty name="$sitemap.sort" }value="{$sitemap.sort}" {/notempty}></td>
</tr>
<tr>
<td class="layui-td-gray2">PC端链接<font>*</font>
</td>
<td class="layui-td-gray">PC端链接<font>*</font></td>
<td>
<input type="text" name="pc_src" lay-verify="required" autocomplete="off" placeholder="请输入PC端链接"
lay-reqText="请输入PC端链接" class="layui-input" {notempty name="$sitemap.pc_src"
}value="{$sitemap.pc_src}" {/notempty}>
</td>
<td class="layui-td-gray2">移动端链接<font>*</font>
<input type="text" name="pc_src" lay-verify="required" autocomplete="off" placeholder="请输入PC端链接" lay-reqText="请输入PC端链接" class="layui-input" {notempty name="$sitemap.pc_src"}value="{$sitemap.pc_src}" {/notempty}>
</td>
<td class="layui-td-gray">移动端链接<font>*</font></td>
<td>
<input type="text" name="mobile_src" lay-verify="required" autocomplete="off" placeholder="请输入移动端链接"
lay-reqText="请输入移动端链接" class="layui-input" {notempty name="$sitemap.mobile_src"
}value="{$sitemap.mobile_src}" {/notempty}>
<input type="text" name="mobile_src" lay-verify="required" autocomplete="off" placeholder="请输入移动端链接" lay-reqText="请输入移动端链接" class="layui-input" {notempty name="$sitemap.mobile_src"}value="{$sitemap.mobile_src}" {/notempty}>
</td>
</tr>
<tr>
<td class="layui-td-gray2">PC端图片
</td>
<td class="layui-td-gray">PC端图片</td>
<td>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test1">上传PC端图片</button>
<div class="layui-upload-list" id="demo1" style="width:200px; height:120px; overflow:hidden">
<img {notempty name="$sitemap.pc_img" }src="{:get_file($sitemap.pc_img)}" {/notempty}
heght="120px;" style="max-width: 100%;" />
<input type="hidden" name="pc_img" {notempty name="$sitemap.pc_img" }value="{$sitemap.pc_img}"
{/notempty}>
<img {notempty name="$sitemap.pc_img" }src="{:get_file($sitemap.pc_img)}" {/notempty} heght="120px;" style="max-width: 100%;" />
<input type="hidden" name="pc_img" {notempty name="$sitemap.pc_img" }value="{$sitemap.pc_img}" {/notempty}>
</div>
</div>
</td>
<td class="layui-td-gray2">移动端图片
</td>
<td class="layui-td-gray">移动端图片</td>
<td>
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="test2">上传移动端图片</button>
<div class="layui-upload-list" id="demo2" style="width:200px; height:120px; overflow:hidden">
<img {notempty name="$sitemap.mobile_img" }src="{:get_file($sitemap.mobile_img)}" {/notempty}
heght="120px;" style="max-width: 100%;" />
<input type="hidden" name="mobile_img" {notempty name="$sitemap.mobile_img"
}value="{$sitemap.mobile_img}" {/notempty}>
<img {notempty name="$sitemap.mobile_img" }src="{:get_file($sitemap.mobile_img)}" {/notempty} heght="120px;" style="max-width: 100%;" />
<input type="hidden" name="mobile_img" {notempty name="$sitemap.mobile_img" }value="{$sitemap.mobile_img}" {/notempty}>
</div>
</div>
</td>
@ -68,10 +53,8 @@
{else/}
<input type="hidden" name="sitemap_cate_id" value="{$sitemap_cate_id}" />
{/notempty}
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -117,30 +100,21 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/sitemap/sitemap_info_submit",
url: "/admin/sitemap/sitemap_info_add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', {
icon: 3,
title: '提示'
}, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}

View File

@ -1,23 +1,20 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">轮播组</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">标题<font>*</font>
</td>
<td class="layui-td-gray">标题<font>*</font></td>
<td>
<input type="hidden" name="id" value="{$id}" />
<input type="text" name="title" lay-verify="required" lay-reqText="请输入标题" autocomplete="off" placeholder="请输入标题"
class="layui-input" {notempty name="$slide.title" }value="{$slide.title}" {/notempty}>
<input type="text" name="title" lay-verify="required" lay-reqText="请输入标题" autocomplete="off" placeholder="请输入标题" class="layui-input" {notempty name="$slide.title" }value="{$slide.title}" {/notempty}>
</td>
<td class="layui-td-gray2">标识</td>
<td><input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标识" lay-reqText="请输入标识"
class="layui-input" {notempty name="$slide.name" }value="{$slide.name}" {/notempty}></td>
<td class="layui-td-gray">标识</td>
<td><input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入标识" lay-reqText="请输入标识" class="layui-input" {notempty name="$slide.name" }value="{$slide.name}" {/notempty}></td>
</tr>
<tr>
<td class="layui-td-gray2">状态<font>*</font>
</td>
<td class="layui-td-gray">状态<font>*</font></td>
<td colspan="3">
{if condition="$id eq 0"}
<input type="radio" name="status" value="1" title="正常" checked>
@ -30,18 +27,15 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">备注
</td>
<td class="layui-td-gray">备注</td>
<td colspan="3">
<textarea name="desc" placeholder="请输入备注"
class="layui-textarea">{notempty name="$slide.desc" }{$slide.desc}{/notempty}</textarea>
<textarea name="desc" placeholder="请输入备注" class="layui-textarea">{notempty name="$slide.desc" }{$slide.desc}{/notempty}</textarea>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -58,27 +52,21 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/slide/post_submit",
url: "/admin/slide/add",
type: 'post',
data: data.field,
success: function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="ID/标题/标识/备注" class="layui-input"/>
</div>
@ -16,11 +16,11 @@
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/slide/add">+ 添加轮播组</a>
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="add">+ 添加轮播组</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/slide/add?id={{d.id}}">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/slide/slide_info?id={{d.id}}">管理轮播</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-normal" href="/admin/slide/slide_info?id={{d.id}}">管理轮播</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>
</script>
{/block}
<!-- /主体 -->
@ -28,11 +28,13 @@
<!-- 脚本 -->
{block name="script"}
<script>
var tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '轮播组列表',
toolbar: '#toolbarDemo',
@ -75,10 +77,20 @@
]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
rightpage.open("/admin/slide/add","900px");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'edit') {
rightpage.open('/admin/slide/add?id='+obj.data.id,"900px");
return;
}
if (obj.event === 'del') {
layer.confirm('确定删除该轮播组吗?', {
icon: 3,
@ -115,6 +127,6 @@
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,23 +1,21 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<div class="body-table" style="margin-bottom:0;">
<table class="layui-hide" id="test" lay-filter="test"></table>
<div>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</div>
<script type="text/html" id="status">
<i class="layui-icon {{# if(d.status == 1){ }}layui-icon-ok{{# } else { }}layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-normal layui-btn-sm" href="/admin/slide/slide_info_add?sid={$slide_id}">+ 添加轮播</a>
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm add-menu">+ 添加轮播</button>
<button class="layui-btn layui-btn-primary layui-btn-sm add-back">返回</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" href="/admin/slide/slide_info_add?id={{d.id}}">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></a>
<div class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></a>
</script>
{/block}
<!-- /主体 -->
@ -25,13 +23,14 @@
<!-- 脚本 -->
{block name="script"}
<script>
var slide_id = '{$slide_id}';
var slide_id = '{$slide_id}',tableIns = null;
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
var tableIns = table.render({
tableIns = table.render({
elem: '#test',
title: '轮播列表',
toolbar: '#toolbarDemo',
@ -85,10 +84,24 @@
]
});
//表头工具栏事件
$('.add-menu').on('click',function(){
rightpage.open("/admin/slide/slide_info_add?sid="+slide_id,'900px');
return;
});
//监听返回
$('.add-back').on('click',function () {
history.back(-1);
return false;
});
//监听行工具事件
table.on('tool(test)', function(obj) {
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'edit') {
rightpage.open('/admin/slide/slide_info_add?id='+obj.data.id,'900px');
return;
}
if (obj.event === 'del') {
layer.confirm('确定删除该轮播数据吗?', {
icon: 3,
@ -110,13 +123,8 @@
});
}
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>
{include file="common/layui" base="base" extend="[]" callback="init" /}
{include file="common/layui" base="base" extend="['rightpage']" callback="init" /}
{/block}
<!-- /脚本 -->

View File

@ -1,7 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form page-content">
<h3 class="h3-title">幻灯片</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">标题<font>*</font></td>
@ -16,7 +17,7 @@
<button type="button" class="layui-btn layui-btn-sm layui-btn-normal" id="test1">选择要上传的图片</button>
<div class="layui-upload-list" id="demo1" style="width: 100%;height:100px; overflow:hidden;">
<img {notempty name="$slide_info.img" }src="{:get_file($slide_info.img)}" {/notempty}
style="max-width: 160px;" />
style="max-width: 120px;" />
<input type="hidden" lay-verify="required" lay-reqText="请选择要上传的图片" name="img" {notempty name="$slide_info.img" }value="{$slide_info.img}" {/notempty}>
</div>
</div>
@ -30,7 +31,7 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">状态<font>*</font></td>
<td class="layui-td-gray">状态<font>*</font></td>
<td>
{if condition="$id eq 0"}
<input type="radio" name="status" value="1" title="正常" checked>
@ -45,11 +46,9 @@
name="$slide_info.sort" }value="{$slide_info.sort}" {/notempty}></td>
</tr>
<tr>
<td class="layui-td-gray">备注
</td>
<td class="layui-td-gray">备注</td>
<td colspan="5">
<textarea name="desc" placeholder="请输入备注"
class="layui-textarea">{notempty name="$slide_info.desc" }{$slide_info.desc}{/notempty}</textarea>
<textarea name="desc" placeholder="请输入备注" class="layui-textarea">{notempty name="$slide_info.desc" }{$slide_info.desc}{/notempty}</textarea>
</td>
</tr>
</table>
@ -58,7 +57,6 @@
<input type="hidden" name="slide_id" value="{$slide_id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
</div>
</form>
{/block}
@ -90,27 +88,21 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/slide/slide_info_submit",
url: "/admin/slide/slide_info_add",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
layer.close(index);
});
} else {
layer.msg(e.msg);
}
}
layer.msg(e.msg);
if (e.code == 0) {
parent.tableIns.reload();
setTimeout(function(){
parent.layui.rightpage.close();
},1000);
}
}
})
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
return false;
});
}
</script>

View File

@ -1,81 +1,73 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<form class="layui-form body-content">
<form class="layui-form body-table">
<h3 style="font-weight:600; padding:10px">编辑用户信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">登录账号</td>
<td class="layui-td-gray">用户等级 <span style="color: red">*</span></td>
<td>
<input type="hidden" name="id" value="{$user.id}">
{$user.username}
<select name="level" lay-verify="required" lay-reqText="请选择用户等级">
<option value="">请选择用户等级</option>
{volist name="levels" id="v"}
<option value="{$v.id}" {eq name="$user.level" value="$v.id"}selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray2">用户昵称 <span style="color: red">*</span></td>
<td class="layui-td-gray">用户昵称 <span style="color: red">*</span></td>
<td>
<input type="text" name="nickname" placeholder="请输入用户昵称" autocomplete="off" class="layui-input" value="{$user.nickname}" lay-verify="required">
<input type="text" name="nickname" placeholder="请输入用户昵称" autocomplete="off" class="layui-input" value="{$user.nickname}" lay-verify="required" lay-reqText="请输入用户昵称">
</td>
<td class="layui-td-gray2">真实姓名</td>
<td class="layui-td-gray">真实姓名</td>
<td>
<input type="text" name="name" placeholder="请输入真实姓名" autocomplete="off" class="layui-input" value="{$user.name}">
</td>
</tr>
<tr>
<td class="layui-td-gray2">性别</td>
<td class="layui-td-gray">性别</td>
<td>
<input type="radio" name="sex" value="1" title="男" {eq name="$user.sex" value="1" }checked{/eq}>
<input type="radio" name="sex" value="2" title="女" {eq name="$user.sex" value="2" }checked{/eq}>
</td>
<td class="layui-td-gray2">手机号码</td>
<td class="layui-td-gray">手机号码</td>
<td>
<input type="text" name="mobile" placeholder="请输入手机" autocomplete="off" class="layui-input" value="{$user.mobile}">
</td>
<td class="layui-td-gray2">电子邮箱</td>
<td class="layui-td-gray">电子邮箱</td>
<td>
<input type="text" name="email" placeholder="请输入电子邮箱" autocomplete="off" class="layui-input" value="{$user.email}">
</td>
</tr>
<tr>
<td class="layui-td-gray2">个人简介</td>
<td class="layui-td-gray">个人简介</td>
<td colspan="5">
<textarea name="desc" placeholder="请输入个人简介" class="layui-textarea">{$user.desc}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray2">国家</td>
<td>
<input type="text" name="country" placeholder="请输入所在国家" autocomplete="off" class="layui-input" value="{$user.country}">
</td>
<td class="layui-td-gray2">省份</td>
<td>
<input type="text" name="province" placeholder="请输入所在省份" autocomplete="off" class="layui-input" value="{$user.province}">
</td>
<td class="layui-td-gray2">城市</td>
<td>
<input type="text" name="city" placeholder="请输入所在城市" autocomplete="off" class="layui-input" value="{$user.city}">
</td>
</tr>
<tr>
<td class="layui-td-gray2">所在企业</td>
<td class="layui-td-gray">所在企业</td>
<td>
<input type="text" name="company" placeholder="请输入所在企业" autocomplete="off" class="layui-input" value="{$user.company}">
</td>
<td class="layui-td-gray2">所在部门</td>
<td class="layui-td-gray">所在部门</td>
<td>
<input type="text" name="depament" placeholder="请输入所在部门" autocomplete="off" class="layui-input" value="{$user.depament}">
</td>
<td class="layui-td-gray2">所在职位</td>
<td class="layui-td-gray">所在职位</td>
<td>
<input type="text" name="position" placeholder="请输入所在职位" autocomplete="off" class="layui-input" value="{$user.position}">
</td>
</tr>
<tr>
<td class="layui-td-gray2">企业地址</td>
<td class="layui-td-gray">企业地址</td>
<td colspan="5">
<input type="text" name="address" placeholder="请输入企业地址" autocomplete="off" class="layui-input" value="{$user.address}">
</td>
</tr>
</table>
<div style="padding: 10px 0">
<div style="padding: 10px">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button lay-event="back" class="layui-btn layui-btn-primary">返回</button>
@ -110,13 +102,13 @@
//监听提交
form.on('submit(webform)', function (data) {
$.ajax({
url: "/admin/user/post_submit",
url: "/admin/user/edit",
type: 'post',
data: data.field,
success: function (e) {
if (e.code == 0) {
layer.confirm('保存成功,返回列表页吗?', { icon: 3, title: '提示' }, function (index) {
history.back(-1);
window.location.href="/admin/user/index.html";
layer.close(index);
});
} else {
@ -127,8 +119,8 @@
return false;
});
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
history.back(-1);
$('.body-table').on('click', '[lay-event="back"]', function () {
window.location.href="/admin/user/index.html";
return false;
});

View File

@ -1,8 +1,8 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="昵称/真实姓名/手机号" class="layui-input" autocomplete="off"/>
</div>
@ -77,6 +77,11 @@
title: '用户名',
align: 'center',
width: 100
}, {
field: 'level_name',
title: '会员等级',
align: 'center',
width: 90
}, {
field: 'sex',
title: '性别',
@ -96,7 +101,7 @@
title: '昵称',
align: 'center',
width: 100
}, {
},{
field: 'name',
title: '真实姓名',
align: 'center',
@ -109,24 +114,25 @@
}, {
field: 'email',
title: '电子邮箱',
align: 'center'
align: 'center',
minWidth: 150
},{
field: 'register_time',
title: '注册时间',
align: 'center',
width: 160
width: 150
}, {
field: 'status',
title: '状态',
toolbar: '#status',
align: 'center',
width: 66
width: 60
},{
field: 'right',
title: '操作',
align: 'center',
toolbar: '#barDemo',
width: 136
width: 130
}
]
]

View File

@ -1,10 +1,18 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div class="body-table">
<form class="layui-form layui-form-bar">
<div class="layui-input-inline" style="width:300px;">
<input type="text" name="keywords" placeholder="昵称/操作标题" class="layui-input" autocomplete="off" />
<input type="text" name="keywords" placeholder="昵称/操作数据id/操作描述" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline">
<select name="action">
<option value="">请选择类型</option>
{volist name="$type_action" id="vo"}
<option value="{$vo}">{$vo}</option>
{/volist}
</select>
</div>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
@ -43,6 +51,11 @@
field: 'content',
title: '操作描述',
width: 360
},{
field: 'param_id',
title: '操作数据ID',
align: 'center',
width: 100
}, {
field: 'param',
title: '操作数据'
@ -71,7 +84,7 @@
tableIns.reload({
where: {
keywords: data.field.keywords,
title_cate: data.field.title_cate
action: data.field.action
},
page: {
curr: 1

View File

@ -6,7 +6,7 @@
.latest-news .layui-timeline-title{padding-bottom:0; font-size: 14px;}
.latest-news .layui-timeline-item{padding-bottom:5px;}
.layui-timeline-title span{color:#999}
.panel-more{width: 100%; height:48px; line-height: 48px; text-align: center; position: absolute; bottom: 0; left:0; background: linear-gradient(rgba(225,225,225,0),rgba(225,225,225,.8));}
.panel-more{width: 100%; height:48px; line-height: 48px; text-align: center; position: absolute; bottom: 0; left:0;}
.panel-more a{color:#0088FF}
</style>
{/block}

View File

@ -1,18 +1,19 @@
{extend name="common/base"/}
<!-- 主体 -->
{block name="body"}
<div class="layui-form body-content">
<div class="layui-form body-table">
<h3 style="font-weight:600; padding:10px">用户信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray2">登录账号</td>
<td class="layui-td-gray">登录账号</td>
<td>
{$user.username}
</td>
<td class="layui-td-gray2">昵称</td>
<td class="layui-td-gray">会员等级</td>
<td>
{$user.nickname}
{$user.level_name}
</td>
<td rowspan="4" class="layui-td-gray2">头像</td>
<td rowspan="4" class="layui-td-gray">头像</td>
<td rowspan="4" valign="top" style="width: 150px;">
<div class="layui-upload">
<img src="{$user.headimgurl}" width="150" height="150" style="max-width: 100%;" />
@ -20,87 +21,87 @@
</td>
</tr>
<tr>
<td class="layui-td-gray2">注册时间</td>
<td class="layui-td-gray">注册时间</td>
<td>
{$user.register_time | date='Y-m-d H:i:s'}
</td>
<td class="layui-td-gray2">注册IP</td>
<td class="layui-td-gray">注册IP</td>
<td>
{$user.register_ip}
</td>
</tr>
<tr>
<td class="layui-td-gray2">真实姓名</td>
<td class="layui-td-gray">真实姓名</td>
<td>
{$user.name}
</td>
<td class="layui-td-gray2">状态</td>
<td class="layui-td-gray">状态</td>
<td>
{eq name="$user.status" value="1" }正常{/eq}
{eq name="$user.status" value="0" }禁止登录{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray2">手机号码</td>
<td class="layui-td-gray">手机号码</td>
<td>
{$user.mobile}
</td>
<td class="layui-td-gray2">电子邮箱</td>
<td class="layui-td-gray">电子邮箱</td>
<td>
{$user.email}
</td>
</tr>
<tr>
<td class="layui-td-gray2">所在城市</td>
<td class="layui-td-gray">昵称</td>
<td>
{$user.country}-{$user.province}-{$user.city}
{$user.nickname}
</td>
<td class="layui-td-gray2">性别</td>
<td class="layui-td-gray">性别</td>
<td>
{eq name="$user.sex" value="1" }男{/eq}
{eq name="$user.sex" value="2" }女{/eq}
{eq name="$user.sex" value="0" }未知{/eq}
</td>
<td class="layui-td-gray2">生日</td>
<td class="layui-td-gray">生日</td>
<td>
{$user.birthday | date='Y-m-d'}
</td>
</tr>
<tr>
<td class="layui-td-gray2">个人简介</td>
<td class="layui-td-gray">个人简介</td>
<td colspan="5">
{$user.desc}
</td>
</tr>
<tr>
<td class="layui-td-gray2">所在企业</td>
<td class="layui-td-gray">所在企业</td>
<td>
{$user.company}
</td>
<td class="layui-td-gray2">所在部门</td>
<td class="layui-td-gray">所在部门</td>
<td>
{$user.depament}
</td>
<td class="layui-td-gray2">所在职位</td>
<td class="layui-td-gray">所在职位</td>
<td>
{$user.position}
</td>
</tr>
<tr>
<td class="layui-td-gray2">企业地址</td>
<td class="layui-td-gray">企业地址</td>
<td colspan="5">
{$user.address}
</td>
</tr>
<tr>
<td class="layui-td-gray">最后登录IP</td>
<td>
{$user.last_login_ip}
</td>
<td class="layui-td-gray2">最后登录时间</td>
<td>
{$user.last_login_time | date='Y-m-d H:i:s'}
</td>
<td class="layui-td-gray2">最后登录IP</td>
<td>
{$user.last_login_ip}
</td>
<td class="layui-td-gray2">累计登录次数</td>
<td>
{$user.login_num}
@ -108,7 +109,7 @@
</tr>
</table>
<div style="padding: 10px 0">
<div style="padding: 10px">
<button lay-event="back" class="layui-btn layui-btn-primary">关闭</button>
</div>
</div>
@ -121,7 +122,7 @@
function init(layui) {
var TAB = parent.layui.tab;
//监听返回
$('.body-content').on('click', '[lay-event="back"]', function () {
$('.body-table').on('click', '[lay-event="back"]', function () {
TAB.sonDelete();
return false;
});

View File

@ -315,54 +315,12 @@ function isRobot($except = '') {
*/
function add_user_log($type, $param_str = '', $param_id = 0, $param = [])
{
$request = request();
switch ($type) {
case 'login':
$title = '登录';
break;
case 'reg':
$title = '注册';
break;
case 'add':
$title = '新增';
break;
case 'edit':
$title = '编辑';
break;
case 'view':
$title = '查看';
break;
case 'delete':
$title = '删除';
break;
case 'down':
$title = '下载';
break;
case 'join':
$title = '报名';
break;
case 'sign':
$title = '签到';
break;
case 'play':
$title = '播放';
break;
case 'order':
$title = '下单';
break;
case 'pay':
$title = '支付';
break;
case 'api':
$title = 'API请求';
break;
case 'install':
$title = '安装';
break;
default:
$title = '未知';
break;
}
$request = request();
$title = '未知操作';
$type_action = get_config('log.user_action');
if($type_action[$type]){
$title = $type_action[$type];
}
if ($type == 'login') {
$login_user = \think\facade\Db::name('User')->where(array('id' => $param_id))->find();
if ($login_user['nickname'] == '') {
@ -400,10 +358,10 @@ function add_user_log($type, $param_str = '', $param_id = 0, $param = [])
$data['content'] = $content;
$data['param_id'] = $param_id;
$data['param'] = json_encode($param);
$data['module'] = \think\facade\App::initialize()->http->getName();
$data['controller'] = app('request')->controller();
$data['function'] = app('request')->action();
$data['ip'] = $request->ip();
$data['module'] = strtolower(app('http')->getName());
$data['controller'] = strtolower(app('request')->controller());
$data['function'] = strtolower(app('request')->action());
$data['ip'] = app('request')->ip();
$data['create_time'] = time();
\think\facade\Db::name('UserLog')->strict(false)->field(true)->insert($data);
}

View File

@ -39,7 +39,11 @@ class Login
$str = str_replace("https://","",$str); //去掉https://
$strdomain = explode("/",$str); // 以“/”分开成数组
$domain = $strdomain[0]; //取第一个“/”以前的字符
add_user_log('install', '系统',0,['domain'=>$domain]);
$name = '系统';
if (!empty($_GET['name'])) {
$name = $_GET['name'];
}
add_user_log('install', $name,0,['domain'=>$domain]);
if (!empty($_GET['callback'])) {
return $_GET['callback'] . '("install ok!")'; // jsonp
}

View File

@ -20,6 +20,7 @@ class User extends BaseController
$uid = get_login_user('id');
$userInfo = Db::name('User')->where(['id' => $uid])->find();
$userInfo['showname'] = empty($userInfo['nickname']) ? $userInfo['username'] : $userInfo['nickname'];
$userInfo['level_title'] = Db::name('UserLevel')->where(['id' => $userInfo['level']])->value('title');
$userInfo['sex'] = ($userInfo['sex'] == 1) ? '男' : '女';
add_user_log('view', '个人中心');
View::assign('userInfo', $userInfo);
@ -30,6 +31,7 @@ class User extends BaseController
{
$uid = get_login_user('id');
$userInfo = Db::name('User')->where(['id' => $uid])->find();
$userInfo['birthday'] = $userInfo['birthday']==0 ? '' : date('Y-m-d', $userInfo['birthday']);
add_user_log('view', '个人信息');
View::assign('userInfo', $userInfo);
return view();

View File

@ -184,12 +184,10 @@
<div class="form-box">
<form id="gouguLogin">
<div class="form-item">
<input type="text" name="name" placeholder="账户" autocomplete="off"
class="login-input">
<input type="text" name="name" placeholder="账户" autocomplete="off" class="login-input">
</div>
<div class="form-item">
<input type="password" name="password" placeholder="密码" autocomplete="off"
class="login-input">
<input type="password" name="password" placeholder="密码" autocomplete="off" class="login-input">
</div>
<div class="form-item">
<div style="width:140px;display: inline;">

View File

@ -15,7 +15,7 @@
<div class="user-info">
<dl class="clearfix">
<dt class="user-info-img"><img src="{$userInfo.headimgurl}" /></dt>
<dd class="user-info-name">{$userInfo.showname}</dd>
<dd class="user-info-name">{$userInfo.showname} [{$userInfo.level_title}]</dd>
<dd class="user-info-tips">
{$userInfo.desc}
</dd>

View File

@ -39,7 +39,7 @@
</td>
<td class="td-gay">出生日期</td>
<td>
<input type="text" id="birthday" name="birthday" readonly value="{:date('Y-m-d',$userInfo.birthday)}" style="width:99%;" placeholder="请选择出生日期" />
<input type="text" id="birthday" name="birthday" readonly value="{$userInfo.birthday}" style="width:99%;" placeholder="请选择出生日期" />
</td>
</tr>
<tr>

View File

@ -39,7 +39,6 @@ CREATE TABLE `cms_admin_group` (
`title` varchar(255) NOT NULL DEFAULT '',
`status` int(1) NOT NULL DEFAULT '1',
`rules` varchar(1000) DEFAULT '' COMMENT '用户组拥有的规则id 多个规则","隔开',
`menus` varchar(1000) DEFAULT '',
`desc` text COMMENT '备注',
`create_time` int(11) NOT NULL DEFAULT '0',
`update_time` int(11) NOT NULL DEFAULT '0',
@ -50,8 +49,8 @@ CREATE TABLE `cms_admin_group` (
-- ----------------------------
-- Records of cms_admin_group
-- ----------------------------
INSERT INTO `cms_admin_group` VALUES ('1', '超级管理员', '1', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22', '超级管理员,系统自动分配所有可操作权限及菜单。', '0', '0');
INSERT INTO `cms_admin_group` VALUES (2, '测试角色', 1, '1,5,6,11,15,19,23,28,29,30,2,37,41,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,3,67,68,70,71,72,73,4,74,75,76,77,78,79,80,81', '1,5,6,7,8,9,10,11,12,2,13,14,15,16,17,3,18,19,4,20,21,22', '测试角色', 0, 0);
INSERT INTO `cms_admin_group` VALUES ('1', '超级管理员', '1', '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80', '超级管理员,系统自动分配所有可操作权限及菜单。', '0', '0');
INSERT INTO `cms_admin_group` VALUES (2, '测试角色', 1, '1,11,15,18,21,26,28,29,30,33,2,37,40,46,49,52,55,58,3,60,63,65,67,68,4,69,72,5,75,78', '测试角色', 0, 0);
-- ----------------------------
-- Table structure for `cms_admin_group_access`
-- ----------------------------
@ -70,170 +69,167 @@ CREATE TABLE `cms_admin_group_access` (
INSERT INTO `cms_admin_group_access` VALUES ('1', '1', '0', '0');
-- ----------------------------
-- Table structure for `cms_admin_menu`
-- Table structure for cms_admin_module
-- ----------------------------
DROP TABLE IF EXISTS `cms_admin_menu`;
CREATE TABLE `cms_admin_menu` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL DEFAULT '',
`src` varchar(255) DEFAULT '',
`icon` varchar(255) DEFAULT '',
`sort` int(11) NOT NULL DEFAULT '1' COMMENT '越大越靠前',
`create_time` int(11) NOT NULL DEFAULT '0',
`update_time` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='后台菜单';
DROP TABLE IF EXISTS `cms_admin_module`;
CREATE TABLE `cms_admin_module` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '模块名称',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '模块所在目录,小写字母',
`icon` varchar(255) NOT NULL DEFAULT '' COMMENT '图标',
`status` int(1) NOT NULL DEFAULT 1 COMMENT '状态,0禁用,1正常',
`type` int(1) NOT NULL DEFAULT 2 COMMENT '模块类型,2普通模块,1系统模块',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '功能模块表';
-- ----------------------------
-- Records of cms_admin_menu
-- Records of cms_admin_module
-- ----------------------------
INSERT INTO `cms_admin_menu` VALUES (1, 0, '系统管理', '', 'icon-yingyongguanli', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (2, 0, '基础数据', '', 'icon-shebeiguanli', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (3, 0, '平台用户', '', 'icon-quanxianshenpi', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (4, 0, '资讯中心', '', 'icon-daibanshixiang', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (5, 1, '系统配置', 'admin/conf/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (6, 1, '功能菜单', 'admin/menu/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (7, 1, '功能节点', 'admin/rule/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (8, 1, '权限角色', 'admin/role/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (9, 1, '管 理 员', 'admin/admin/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (10, 1, '操作日志', 'admin/admin/log', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (11, 1, '数据备份', 'admin/database/database', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (12, 1, '数据还原', 'admin/database/backuplist', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (13, 2, '导航设置', 'admin/nav/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (14, 2, '网站地图', 'admin/sitemap/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (15, 2, '轮播广告', 'admin/slide/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (16, 2, 'SEO关键字', 'admin/keywords/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (17, 2, '搜索关键词', 'admin/search/index', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (18, 3, '用户列表', 'admin/user/index', '',1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (19, 3, '操作记录', 'admin/user/record', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (20, 3, '操作日志', 'admin/user/log', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (21, 4, '文章分类', 'admin/article/cate', '', 1, 0, 0);
INSERT INTO `cms_admin_menu` VALUES (22, 4, '文章列表', 'admin/article/index', '', 1, 0, 0);
INSERT INTO `cms_admin_module` VALUES (1, '后台模块', 'admin', '', 1, 1, 1639562910, 0);
INSERT INTO `cms_admin_module` VALUES (2, '前台模块', 'home', '', 1, 1, 1639562910, 0);
-- ----------------------------
-- Table structure for `cms_admin_rule`
-- Table structure for cms_admin_rule
-- ----------------------------
DROP TABLE IF EXISTS `cms_admin_rule`;
CREATE TABLE `cms_admin_rule` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) unsigned NOT NULL DEFAULT '0',
`src` varchar(255) NOT NULL DEFAULT '' COMMENT '规则',
`title` varchar(255) NOT NULL DEFAULT '',
`create_time` int(11) NOT NULL DEFAULT '0',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='权限节点';
CREATE TABLE `cms_admin_rule` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`pid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '父id',
`src` varchar(255) NOT NULL DEFAULT '' COMMENT 'url链接',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '日志操作名称',
`icon` varchar(255) NOT NULL DEFAULT '' COMMENT '图标',
`menu` int(1) NOT NULL DEFAULT 0 COMMENT '是否是菜单,1是,2不是',
`sort` int(11) NOT NULL DEFAULT 1 COMMENT '越小越靠前',
`status` int(1) NOT NULL DEFAULT 1 COMMENT '状态,0禁用,1正常',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '菜单及权限表';
-- ----------------------------
-- Records of cms_admin_rule
-- ----------------------------
INSERT INTO `cms_admin_rule` VALUES (1, 0, '', '系统管理', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (2, 0, '', '基础数据', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (3, 0, '', '平台用户', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (4, 0, '', '资讯中心', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (5, 1, 'admin/conf/index', '系统配置', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (6, 5, 'admin/conf/add', '新增配置信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (7, 5, 'admin/conf/post_submit', '保存配置信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (8, 5, 'admin/conf/edit', '编辑配置详情', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (9, 5, 'admin/conf/conf_submit', '保存配置内容', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (10, 5, 'admin/conf/delete', '删除配置信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (11, 1, 'admin/menu/index', '功能菜单', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (12, 11, 'admin/menu/add', '添加菜单', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (13, 11, 'admin/menu/post_submit', '保存菜单信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (14, 11, 'admin/menu/delete', '删除菜单', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (15, 1, 'admin/rule/index', '功能节点', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (16, 15, 'admin/rule/add', '添加节点', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (17, 15, 'admin/rule/post_submit', '保存节点信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (18, 15, 'admin/rule/delete', '删除节点', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (19, 1, 'admin/role/index', '权限角色', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (20, 19, 'admin/role/add', '添加角色',0, 0);
INSERT INTO `cms_admin_rule` VALUES (21, 19, 'admin/role/post_submit', '保存角色信息',0, 0);
INSERT INTO `cms_admin_rule` VALUES (22, 19, 'admin/role/delete', '删除角色', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (23, 1, 'admin/admin/index', '管理员', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (24, 23, 'admin/admin/add', '添加/修改管理员', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (25, 23, 'admin/admin/post_submit', '保存管理员信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (26, 23, 'admin/admin/view', '查看管理员信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (27, 23, 'admin/admin/delete', '删除管理员',0, 0);
INSERT INTO `cms_admin_rule` VALUES (28, 1, 'admin/admin/log', '操作日志',0, 0);
INSERT INTO `cms_admin_rule` VALUES (29, 1, 'admin/database/database', '备份数据', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (30, 29, 'admin/database/backup', '备份数据表', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (31, 29, 'admin/database/optimize', '优化数据表', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (32, 29, 'admin/database/repair', '修复数据表', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (33, 1, 'admin/database/backuplist', '还原数据', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (34, 33, 'admin/database/import', '还原数据表', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (35, 33, 'admin/database/downfile', '下载备份数据', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (36, 33, 'admin/database/del', '删除备份数据', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (37, 2, 'admin/nav/index', '导航组管理', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (38, 37, 'admin/nav/add', '添加/修改导航组', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (39, 37, 'admin/nav/post_submit', '保存导航组信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (40, 37, 'admin/nav/delete', '删除导航组', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (41, 2, 'admin/nav/nav_info', '导航管理', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (42, 41, 'admin/nav/nav_info_add', '添加/修改导航', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (43, 41, 'admin/nav/nav_info_submit', '保存导航信息',0, 0);
INSERT INTO `cms_admin_rule` VALUES (44, 41, 'admin/nav/nav_info_delete', '删除导航',0, 0);
INSERT INTO `cms_admin_rule` VALUES (45, 2, 'admin/sitemap/index', '网站地图分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (46, 45, 'admin/sitemap/add', '添加/编辑网站地图分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (47, 45, 'admin/sitemap/post_submit', '保存网站地图分类信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (48, 45, 'admin/sitemap/delete', '删除网站地图分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (49, 2, 'admin/sitemap/sitemap_info', '网站地图', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (50, 49, 'admin/sitemap/sitemap_info_add', '添加/编辑网站地图',0, 0);
INSERT INTO `cms_admin_rule` VALUES (51, 49, 'admin/sitemap/sitemap_info_submit', '保存网站地图信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (52, 49, 'admin/sitemap/sitemap_info_delete', '删除网站地图', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (53, 2, 'admin/slide/index', '轮播组',0, 0);
INSERT INTO `cms_admin_rule` VALUES (54, 53, 'admin/slide/add', '添加轮播组', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (55, 53, 'admin/slide/post_submit', '保存轮播组信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (56, 53, 'admin/slide/delete', '删除轮播组', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (57, 2, 'admin/slide/slide_info', '轮播广告', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (58, 57, 'admin/slide/slide_info_add', '添加轮播图', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (59, 57, 'admin/slide/slide_info_submit', '保存轮播图信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (60, 57, 'admin/slide/slide_info_delete', '删除轮播图', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (61, 2, 'admin/keywords/index', 'SEO关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (62, 61, 'admin/keywords/add', '添加SEO关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (63, 61, 'admin/keywords/post_submit', '保存SEO关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (64, 61, 'admin/keywords/delete', '删除SEO关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (65, 2, 'admin/search/index', '搜索关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (66, 65, 'admin/search/delete', '删除搜索关键字', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (67, 3, 'admin/user/index', '用户管理', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (68, 67, 'admin/user/edit', '编辑用户信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (69, 67, 'admin/user/post_submit', '保存用户信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (70, 67, 'admin/user/view', '查看用户信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (71, 67, 'admin/user/delete', '禁用用户',0, 0);
INSERT INTO `cms_admin_rule` VALUES (72, 3, 'admin/user/record', '操作记录', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (73, 3, 'admin/user/log', '操作日志', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (74, 4, 'admin/article/cate', '文章分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (75, 74, 'admin/article/cate_add', '添加文章分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (76, 74, 'admin/article/cate_post_submit', '保存文章分类信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (77, 74, 'admin/article/cate_delete', '删除文章分类', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (78, 4, 'admin/article/index', '文章列表', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (79, 78, 'admin/article/add', '添加文章', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (80, 78, 'admin/article/post_submit', '保存文章信息', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (81, 78, 'admin/article/delete', '删除文章', 0, 0);
INSERT INTO `cms_admin_rule` VALUES (1, 0, '', '系统管理', '系统管理', 'icon-jichupeizhi', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (2, 0, '', '基础数据', '基础数据', 'icon-hetongshezhi', 1, 2, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (3, 0, '', '平台用户', '平台用户', 'icon-renshishezhi', 1, 3, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (4, 0, '', '资讯中心', '资讯中心', 'icon-kechengziyuanguanli', 1, 4, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (5, 0, '', '商品中心', '商品中心', 'icon-dianshang', 1, 5, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (11, 1, 'admin/conf/index', '系统配置', '系统配置', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (12, 11, 'admin/conf/add', '新建/编辑', '配置项', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (13, 11, 'admin/conf/delete', '删除', '配置项', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (14, 11, 'admin/conf/edit', '编辑', '配置详情', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (15, 1, 'admin/module/index', '功能模块', '功能模块', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (16, 15, 'admin/module/add', '新建/编辑', '功能模块', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (17, 15, 'admin/module/disable', '禁用/启用', '功能模块', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (18, 1, 'admin/rule/index', '功能节点', '功能节点', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (19, 18, 'admin/rule/add', '新建/编辑', '功能节点', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (20, 18, 'admin/rule/delete', '删除', '功能节点', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (21, 1, 'admin/role/index', '权限角色', '权限角色', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (22, 21, 'admin/role/add', '新建/编辑', '权限角色', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (23, 21, 'admin/role/delete', '删除', '权限角色', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (24, 1, 'admin/admin/index', '管理员', '管理员', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (25, 24, 'admin/admin/add', '添加/修改', '管理员', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (26, 24, 'admin/admin/view', '查看', '管理员', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (27, 24, 'admin/admin/delete', '删除', '管理员', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (28, 1, 'admin/log/index', '操作日志', '操作日志', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (29, 1, 'admin/database/database', '备份数据', '备份数据', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (30, 29, 'admin/database/backup', '备份数据表', '备份数据', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (31, 29, 'admin/database/optimize', '优化数据表', '优化数据表', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (32, 29, 'admin/database/repair', '修复数据表', '修复数据表', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (33, 1, 'admin/database/backuplist', '还原数据', '还原数据', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (34, 33, 'admin/database/import', '还原数据表', '还原数据', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (35, 33, 'admin/database/downfile', '下载备份数据', '下载备份数据', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (36, 33, 'admin/database/del', '删除备份数据', '删除备份数据', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (37, 2, 'admin/nav/index', '导航设置','导航组', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (38, 37, 'admin/nav/add', '新建/编辑','导航组', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (39, 37, 'admin/nav/delete', '删除','导航组', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (40, 2, 'admin/nav/nav_info', '导航管理','导航', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (41, 40, 'admin/nav/nav_info_add', '新建/编辑','导航', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (42, 40, 'admin/nav/nav_info_delete', '删除导航','导航', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (43, 2, 'admin/sitemap/index', '网站地图','网站地图分类', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (44, 43, 'admin/sitemap/add', '新建/编辑','网站地图分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (45, 43, 'admin/sitemap/delete', '删除','网站地图分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (46, 2, 'admin/sitemap/sitemap_info', '网站地图管理','网站地图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (47, 46, 'admin/sitemap/sitemap_info_add', '新建/编辑','网站地图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (48, 46, 'admin/sitemap/sitemap_info_delete', '删除','网站地图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (49, 2, 'admin/slide/index', '轮播广告','轮播组', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (50, 49, 'admin/slide/add', '新建/编辑','轮播组', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (51, 49, 'admin/slide/delete', '删除','轮播组', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (52, 2, 'admin/slide/slide_info', '轮播广告管理','轮播图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (53, 52, 'admin/slide/slide_info_add', '新建/编辑','轮播图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (54, 52, 'admin/slide/slide_info_delete', '删除','轮播图', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (55, 2, 'admin/keywords/index', 'SEO关键字','SEO关键字', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (56, 55, 'admin/keywords/add', '新建/编辑','SEO关键字', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (57, 55, 'admin/keywords/delete', '删除','SEO关键字', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (58, 2, 'admin/search/index', '搜索关键字','搜索关键字', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (59, 58, 'admin/search/delete', '删除','搜索关键字', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (60, 3, 'admin/level/index', '用户等级', '用户等级', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (61, 60, 'admin/level/add', '新建/编辑', '用户等级', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (62, 60, 'admin/level/disable', '禁用/启用', '用户等级', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (63, 3, 'admin/user/index', '用户管理','用户', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (64, 63, 'admin/user/edit', '编辑','用户信息', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (65, 63, 'admin/user/view', '查看','用户信息', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (66, 63, 'admin/user/delete', '禁用','用户', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (67, 3, 'admin/user/record', '操作记录','用户操作记录', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (68, 3, 'admin/user/log', '操作日志','用户操作日志', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (69, 4, 'admin/article/cate', '文章分类','文章分类', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (70, 69, 'admin/article/cate_add', '新建/编辑','文章分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (71, 69, 'admin/article/cate_delete', '删除','文章分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (72, 4, 'admin/article/index', '文章列表','文章', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (73, 72, 'admin/article/add', '新建/编辑','文章', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (74, 72, 'admin/article/delete', '删除','文章', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (75, 5, 'admin/goods/cate', '商品分类','商品分类', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (76, 75, 'admin/goods/cate_add', '新建/编辑','商品分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (77, 75, 'admin/goods/cate_delete', '删除','商品分类', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (78, 5, 'admin/goods/index', '商品列表','商品', '', 1, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (79, 78, 'admin/goods/add', '新建/编辑','商品', '', 2, 1, 1, 0, 0);
INSERT INTO `cms_admin_rule` VALUES (80, 78, 'admin/goods/delete', '删除','商品', '', 2, 1, 1, 0, 0);
-- ----------------------------
-- Table structure for `cms_admin_log`
-- ----------------------------
DROP TABLE IF EXISTS `cms_admin_log`;
CREATE TABLE `cms_admin_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
CREATE TABLE `cms_admin_log` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户ID',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '昵称',
`type` varchar(80) NOT NULL DEFAULT '' COMMENT '操作类型',
`action` varchar(80) NOT NULL DEFAULT '' COMMENT '操作动作',
`subject` varchar(80) NOT NULL DEFAULT '' COMMENT '操作主体',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '操作标题',
`content` text COMMENT '操作描述',
`content` text NULL COMMENT '操作描述',
`module` varchar(32) NOT NULL DEFAULT '' COMMENT '模块',
`controller` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',
`function` varchar(32) NOT NULL DEFAULT '' COMMENT '方法',
`rule_menu` varchar(255) NOT NULL DEFAULT '' COMMENT '节点权限路径',
`ip` varchar(64) NOT NULL DEFAULT '' COMMENT '登录ip',
`param_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作数据id',
`param` text COMMENT '参数json格式',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0删除 1正常',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='后台操作日志表';
`param_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作数据id',
`param` text NULL COMMENT '参数json格式',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '0删除 1正常',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '后台操作日志表';
-- ----------------------------
-- Table structure for `cms_config`
@ -291,11 +287,11 @@ CREATE TABLE `cms_article_cate` (
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='内容分类表';
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='文章分类表';
-- ----------------------------
-- Records of cms_article_cate
-- ----------------------------
INSERT INTO `cms_article_cate` VALUES (1, 0, 0, '勾股cms', '1', '分类描述内容...', 0, 1610196442);
INSERT INTO `cms_article_cate` VALUES (1, 0, 0, '勾股cms', '1', '文章描述内容...', 0, 1610196442);
-- ----------------------------
-- Table structure for `cms_article`
@ -469,10 +465,6 @@ CREATE TABLE `cms_slide_info` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='幻灯片详情表';
-- ----------------------------
-- Records of cms_slide_info
-- ----------------------------
-- ----------------------------
-- Table structure for cms_search_keywords
-- ----------------------------
@ -485,6 +477,37 @@ CREATE TABLE `cms_search_keywords` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT = '搜索关键字表';
-- ----------------------------
-- Records of cms_search_keywords
-- ----------------------------
INSERT INTO `cms_search_keywords` VALUES (1, '勾股CMS', 1, 1);
-- ----------------------------
-- Table structure for cms_user_level
-- ----------------------------
DROP TABLE IF EXISTS `cms_user_level`;
CREATE TABLE `cms_user_level` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '等级名称',
`desc` varchar(1000) DEFAULT NULL,
`status` int(1) NOT NULL DEFAULT 1 COMMENT '状态,0禁用,1正常',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '会员等级表';
-- ----------------------------
-- Records of cms_admin_module
-- ----------------------------
INSERT INTO `cms_user_level` VALUES (1, '普通会员','', 1, 1639562910, 0);
INSERT INTO `cms_user_level` VALUES (2, '铜牌会员','', 1, 1639562910, 0);
INSERT INTO `cms_user_level` VALUES (3, '银牌会员','', 1, 1639562910, 0);
INSERT INTO `cms_user_level` VALUES (4, '黄金会员','', 1, 1639562910, 0);
INSERT INTO `cms_user_level` VALUES (5, '白金会员','', 1, 1639562910, 0);
INSERT INTO `cms_user_level` VALUES (6, '钻石会员','', 1, 1639562910, 0);
-- ----------------------------
-- Table structure for cms_user
-- ----------------------------
@ -513,7 +536,8 @@ CREATE TABLE `cms_user` (
`position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位',
`puid` int(11) NOT NULL DEFAULT 0 COMMENT '推荐人ID,默认是0',
`qrcode_invite` int(11) NOT NULL DEFAULT 0 COMMENT '邀请场景二维码id',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态 -1删除 0禁用 1正常 ',
`level` tinyint(1) NOT NULL DEFAULT 1 COMMENT '等级 默认是普通会员',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态 -1删除 0禁用 1正常',
`last_login_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后登录时间',
`last_login_ip` varchar(64) NOT NULL DEFAULT '' COMMENT '最后登录IP',
`login_num` int(11) NOT NULL DEFAULT '0',
@ -523,6 +547,10 @@ CREATE TABLE `cms_user` (
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT = '用户表';
-- ----------------------------
-- Records of for `cms_user`
-- ----------------------------
INSERT INTO `cms`.`cms_user`(`id`, `nickname`, `nickname_a`, `username`, `password`, `salt`, `name`, `mobile`, `mobile_status`, `email`, `headimgurl`, `sex`, `desc`, `birthday`, `country`, `province`, `city`, `company`, `address`, `depament`, `position`, `puid`, `qrcode_invite`, `level`, `status`, `last_login_time`, `last_login_ip`, `login_num`, `register_time`, `register_ip`, `wx_platform`) VALUES (1, '勾股cms', '', 'hdm58', '88964d8919fea661b3d156d46b492165', 'gmwI4f2ZKdqAHyMB1hoe', '小明名', '13800138000', 0, 'gougu@admin.com', '/static/admin/images/icon.png', 1, '勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级、高性能极速后台开发框架。', 0, '', '', '广州', '广州勾股科技有限公司', '珠江新城', '技术部', '技术总监', 0, 0, 1, 1, 1644820413, '127.0.0.1', 1, 1644820401, '127.0.0.1', 0);
-- ----------------------------
-- Table structure for `cms_user_log`
-- ----------------------------
@ -571,3 +599,84 @@ CREATE TABLE `cms_file` (
`download` int(11) NOT NULL DEFAULT 0 COMMENT '下载量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='文件表';
-- ----------------------------
-- Table structure for cms_goods_cate
-- ----------------------------
DROP TABLE IF EXISTS `cms_goods_cate`;
CREATE TABLE `cms_goods_cate` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '商品分类名称',
`sort` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序',
`pid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '上级id',
`keywords` varchar(255) DEFAULT '' COMMENT '关键字',
`desc` varchar(1000) DEFAULT '' COMMENT '描述',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
`create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '商品分类表';
-- ----------------------------
-- Records of cms_goods_cate
-- ----------------------------
INSERT INTO `cms`.`cms_goods_cate`(`id`, `title`, `sort`, `pid`, `status`, `create_time`, `update_time`) VALUES (1, '勾股科技', 0, 0, 1, 1644808267, 0);
-- ----------------------------
-- Table structure for cms_goods
-- ----------------------------
DROP TABLE IF EXISTS `cms_goods`;
CREATE TABLE `cms_goods` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`cate_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '分类ID',
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '属性1精华 2热门 3推荐',
`is_home` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否首页显示 0否 1是',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '-1删除 0下架 1正常',
`title` varchar(200) NOT NULL DEFAULT '' COMMENT '商品名称',
`thumb` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '缩略图',
`banner` varchar(1000) NOT NULL DEFAULT '' COMMENT '商品轮播图',
`tips` varchar(255) NOT NULL DEFAULT '' COMMENT '商品卖点,一句话推销',
`desc` varchar(1000) NOT NULL DEFAULT '' COMMENT '商品摘要',
`content` text NULL COMMENT 'PC端内容',
`m_content` text NULL COMMENT '手机端内容',
`base_price` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '市场价格',
`price` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '实际价格',
`stocks` int(11) NOT NULL DEFAULT 0 COMMENT '商品库存',
`sales` int(11) NOT NULL DEFAULT 0 COMMENT '商品销量',
`address` varchar(200) NOT NULL DEFAULT '' COMMENT '商品发货地址',
`start_time` int(10) UNSIGNED NULL DEFAULT 0 COMMENT '开始抢购时间',
`end_time` int(10) UNSIGNED NULL DEFAULT 0 COMMENT '结束抢购时间',
`read` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '阅读量',
`sort` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序',
`is_mail` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '是否包邮 0否 1是',
`tag_values` varchar(200) NOT NULL DEFAULT '' COMMENT '商品标签 1正品保证 2一年保修 3七天退换 4赠运费险 5闪电发货 6售后无忧',
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '编辑时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '商品表';
-- ----------------------------
-- Records of cms_goods
-- ----------------------------
INSERT INTO `cms`.`cms_goods`(`id`, `cate_id`, `type`, `is_home`, `status`, `title`, `thumb`, `banner`, `tips`, `desc`, `content`, `m_content`, `base_price`, `price`, `stocks`, `sales`, `address`, `start_time`, `end_time`, `read`, `sort`, `is_mail`, `tag_values`, `admin_id`, `create_time`, `update_time`) VALUES (1, 1, 1, 1, 1, '勾股CMS定制开发方案', 1, '', '赠送一年免费维护服务', '勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案。', '<p>勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案勾股CMS定制开发方案。</p>', NULL, 1999.00, 1888.00, 0, 0, '', 0, 0, 0, 1, 1, '1,2,6', 0, 1644823517, 0);
-- ----------------------------
-- Table structure for `cms_goods_keywords`
-- ----------------------------
DROP TABLE IF EXISTS `cms_goods_keywords`;
CREATE TABLE `cms_goods_keywords` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`aid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品ID',
`keywords_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '关联关键字id',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:-1删除 0禁用 1启用',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `aid` (`aid`),
KEY `inid` (`keywords_id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET = utf8mb4 COMMENT='商品关联表';
-- ----------------------------
-- Records of cms_goods_keywords
-- ----------------------------
INSERT INTO `cms`.`cms_goods_keywords`(`id`, `aid`, `keywords_id`, `status`, `create_time`) VALUES (1, 1, 1, 1, 1644823517);

View File

@ -195,7 +195,7 @@
$.ajax({
url:"https://www.gougucms.com/index.php?s=home/login/install_ajax",
dataType:'jsonp',
data:'',
data:{'name':'勾股CMS'},
jsonp:'callback',
success:function(result) {
console.log(result);

View File

@ -41,5 +41,38 @@ return [
],
// 其它日志通道配置
],
'admin_action' => [
'login' => '登录',
'upload' => '上传',
'down' => '下载',
'import' => '导入',
'export' => '导出',
'add' => '新增',
'edit' => '编辑',
'view' => '查看',
'save' => '保存',
'delete' => '删除',
'send' => '发送',
'disable' => '禁用',
'recovery' => '恢复',
'reset' => '重新设置',
],
'user_action' => [
'login' => '登录',
'reg' => '注册',
'upload' => '上传',
'down' => '下载',
'import' => '导入',
'export' => '导出',
'add' => '新增',
'edit' => '编辑',
'view' => '查看',
'save' => '保存',
'delete' => '删除',
'sign' => '签到',
'join' => '报名',
'install' => '安装',
'spider' => '爬行',
'api' => 'API请求',
],
];

View File

@ -48,7 +48,7 @@ class MDAvatars
) {
//如果是中文,并且没有中文字体包,则按拼音首字母对其进行转换
$CNByte = iconv("UTF-8", "gb2312", $this->Char);
$Code = ord($CNByte{0}) * 256 + ord($CNByte{1}) - 65536;//求其偏移量
$Code = ord($CNByte[0]) * 256 + ord($CNByte[1]) - 65536;//求其偏移量
if ($Code >= -20319 and $Code <= -20284) $this->Char = "A";
if ($Code >= -20283 and $Code <= -19776) $this->Char = "B";
if ($Code >= -19775 and $Code <= -19219) $this->Char = "C";

View File

@ -15,7 +15,7 @@ if (empty(file_exists(__DIR__ . '/../vendor/autoload.php'))) {
require __DIR__ . '/../vendor/autoload.php';
// 定义当前版本号
define('CMS_VERSION','1.9.6');
define('CMS_VERSION','2.0.11');
// 定义ThinkPHP版本号
define('TP_VERSION','6.0.9');

View File

@ -39,9 +39,12 @@
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color: #aaa;
}
.layui-card { box-shadow: 0 1px 3px 0 rgb(5 32 96 / 10%);}
.layui-table, .layui-table-view{margin:0}
.layui-table td,.layui-table th{padding:9px 10px;}
.layui-table-cell{padding:0 10px;}
.layui-table[lay-size=sm] td, .layui-table[lay-size=sm] th {padding: 5px;}
.layui-form-bar{padding:12px;border:1px solid #eee; border-bottom:none;}
.auth-single .auth-icon{font-size:24px; float:left;}
.auth-single .layui-form-radio,.auth-single .layui-form-checkbox{margin-left:0;}
.auth-single .layui-form-radio{margin-top:0;}
@ -63,8 +66,11 @@
.layui-td-gray3{color:#999; width:120px; text-align:right; background-color:#f8f8f8;}
.layui-td-gray4{color:#999; width:150px; text-align:right; background-color:#f8f8f8;}
.layui-td-gray font,.layui-td-gray2 font,.layui-td-gray3 font{color:#FF6347; margin-left: 3px;}
.main-body{padding:10px;padding-bottom: 0;min-width: 800px;}
.body-content{padding:10px;background-color:#fff;box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);}
.main-body{padding:15px;padding-bottom: 0; min-width: 868px;}
.body-content{background-color:#fff; padding:10px 15px;}
.body-table{background-color:#fff; margin-bottom:15px}
.h3-title{font-size:18px; height:39px; font-weight:800}
.h3-title2{font-size:18px; height:39px; font-weight:800; padding-top:20px}
.body-form-btn{padding:10px 0;}
.span-color--1{color:#999999;}
.span-color-0{color:#5FB878;}
@ -75,4 +81,945 @@
.span-color-5{color:#CCCC00;}
.span-color-6{color:#FF33CC;}
.span-color-7{color:#6699FF;}
.span-color-8{color:#CC9933;}
.span-color-8{color:#CC9933;}
.layui-tab-title .layui-this:after {width:calc(100% - 35px );left:15px; min-width:65px;}
@keyframes layui-rl{
from{transform:translateX(0px);}to{transform:translateX(-100%);}
}
@-webkit-keyframes layui-rl{
from{transform:translateX(0px);}to{transform:translateX(-100%);}
}
.layui-anim {
-webkit-animation-duration: .3s;
animation-duration: .3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.layui-anim-rl {
-webkit-animation-name: layui-rl;
animation-name: layui-rl;
}
.layui-layer-admin-right {
box-shadow: 1px 1px 10px rgba(0,0,0,.1);
border-radius: 0!important;
overflow: auto;
}
.layui-anim-rl.layui-layer-iframe{
overflow:inherit!important;
}
.right-popup-close{position: absolute;width:50px;height:44px;line-height:44px;text-align:center; left: -52px;right:0; top: 50px;background-color:#FF5722;color:#fff;border-radius:6px 0 0 6px; cursor:pointer; border:2px solid #fff;}
.page-content{background-color:#fff;}
.layui-form-select dl{ z-index: 1899; }
@font-face {
font-family: "iconfont"; /* Project id 2936988 */
src: url('/static/layui/font/extend/iconfont.woff2?t=1636884517050') format('woff2'),
url('/static/layui/font/extend/iconfont.woff?t=1636884517050') format('woff'),
url('/static/layui/font/extend/iconfont.ttf?t=1636884517050') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-xueshengyidong:before {
content: "\e6e9";
}
.icon-baokao:before {
content: "\e6ea";
}
.icon-chengji:before {
content: "\e6eb";
}
.icon-yuejuan:before {
content: "\e6ec";
}
.icon-kaoheshezhi:before {
content: "\e6ed";
}
.icon-lunwenguanli:before {
content: "\e6ee";
}
.icon-shenbao:before {
content: "\e6ef";
}
.icon-kecheng:before {
content: "\e6f0";
}
.icon-tiku:before {
content: "\e6f1";
}
.icon-jiaowushezhi:before {
content: "\e6f2";
}
.icon-zidingyishezhi:before {
content: "\e6f3";
}
.icon-chaojitongji:before {
content: "\e6f4";
}
.icon-zhaoshengtongji:before {
content: "\e6f5";
}
.icon-tuiguangtongji:before {
content: "\e6f6";
}
.icon-xuexitongji:before {
content: "\e6f7";
}
.icon-diqushujutongji:before {
content: "\e6f8";
}
.icon-shujudaoru:before {
content: "\e6f9";
}
.icon-chengkaoguanli:before {
content: "\e6fb";
}
.icon-yuanchengguanli:before {
content: "\e6fe";
}
.icon-shujiguanli:before {
content: "\e6ff";
}
.icon-guochengxingkaohe:before {
content: "\e700";
}
.icon-xuefenrending:before {
content: "\e701";
}
.icon-kechengdingdan:before {
content: "\e702";
}
.icon-wentifankui:before {
content: "\e703";
}
.icon-zichan:before {
content: "\e704";
}
.icon-KPIguanli:before {
content: "\e705";
}
.icon-xiangmuguanli:before {
content: "\e706";
}
.icon-weixingongzhonghao:before {
content: "\e707";
}
.icon-anquanshezhi:before {
content: "\e708";
}
.icon-fuwuzhongxin:before {
content: "\e709";
}
.icon-qiyefuwu:before {
content: "\e70a";
}
.icon-wangkefuwu:before {
content: "\e70b";
}
.icon-shoufeiguanli:before {
content: "\e70c";
}
.icon-quanxianshezhi:before {
content: "\e70d";
}
.icon-jiaowutongji:before {
content: "\e70f";
}
.icon-jiaoxuetongji:before {
content: "\e710";
}
.icon-shoufeitongji:before {
content: "\e711";
}
.icon-fuwutongji:before {
content: "\e713";
}
.icon-tongzhitongji:before {
content: "\e714";
}
.icon-kaohetongji:before {
content: "\e715";
}
.icon-yonghuhuoyuedu:before {
content: "\e716";
}
.icon-xueshengbaoming:before {
content: "\e717";
}
.icon-xueshengluqu:before {
content: "\e718";
}
.icon-xueshengzhuce:before {
content: "\e719";
}
.icon-zaijixuesheng:before {
content: "\e71a";
}
.icon-huamingce:before {
content: "\e71b";
}
.icon-fenleiguanli:before {
content: "\e71c";
}
.icon-fuwuliebiao:before {
content: "\e71d";
}
.icon-fenleiliebiao:before {
content: "\e71e";
}
.icon-tongzhiliebiao:before {
content: "\e71f";
}
.icon-jiaoxuejihua:before {
content: "\e720";
}
.icon-jiaoxueanpai:before {
content: "\e721";
}
.icon-chengjiguanli:before {
content: "\e722";
}
.icon-tupianguanli:before {
content: "\e723";
}
.icon-kaoshijihua:before {
content: "\e724";
}
.icon-kaoshipeizhi:before {
content: "\e725";
}
.icon-xuexizhongxinguanli:before {
content: "\e726";
}
.icon-kaoheguanli:before {
content: "\e728";
}
.icon-jiaoshiguanli:before {
content: "\e729";
}
.icon-wangkeguanli:before {
content: "\e72a";
}
.icon-bulujiesuan:before {
content: "\e72b";
}
.icon-biyeguanli:before {
content: "\e72c";
}
.icon-kaohezhibiao:before {
content: "\e72d";
}
.icon-qiyeguanli:before {
content: "\e77e";
}
.icon-chubuguanli:before {
content: "\e77f";
}
.icon-hujiaobaobiao:before {
content: "\e780";
}
.icon-saomiaodianjing:before {
content: "\e781";
}
.icon-jiezhang:before {
content: "\e782";
}
.icon-xiaoshoubaobiao:before {
content: "\e783";
}
.icon-pingzheng:before {
content: "\e784";
}
.icon-hetongyidong:before {
content: "\e785";
}
.icon-xiaoshoupin:before {
content: "\e787";
}
.icon-xueshuguanli:before {
content: "\e788";
}
.icon-yihaopin:before {
content: "\e789";
}
.icon-renwuguanli:before {
content: "\e78a";
}
.icon-dianshang:before {
content: "\e78b";
}
.icon-mingpianbaobiao_1:before {
content: "\e78c";
}
.icon-gudingzichan:before {
content: "\e78d";
}
.icon-dongtaiguanli:before {
content: "\e78e";
}
.icon-jichupeizhi:before {
content: "\e78f";
}
.icon-hujiaotongji:before {
content: "\e790";
}
.icon-xiaoshoubaobiao_1:before {
content: "\e791";
}
.icon-dashuju:before {
content: "\e792";
}
.icon-huodongguanli:before {
content: "\e793";
}
.icon-hujiaoshezhi:before {
content: "\e794";
}
.icon-fenxiaoshichang:before {
content: "\e795";
}
.icon-chengjitongji:before {
content: "\e796";
}
.icon-tuiguangshezhi:before {
content: "\e797";
}
.icon-kechengzhongxin:before {
content: "\e798";
}
.icon-hetongshezhi:before {
content: "\e799";
}
.icon-kechengbaoguanli:before {
content: "\e79a";
}
.icon-yonghuguanli:before {
content: "\e79b";
}
.icon-yonghuhuaxiang:before {
content: "\e79c";
}
.icon-zhanghaoguanli:before {
content: "\e79d";
}
.icon-SEMguanli:before {
content: "\e79e";
}
.icon-yusuan:before {
content: "\e79f";
}
.icon-mingpianbaobiao:before {
content: "\e7a0";
}
.icon-dingdanguanli:before {
content: "\e7a1";
}
.icon-tuiguangguanli:before {
content: "\e7a2";
}
.icon-zhuantiguanli:before {
content: "\e7a3";
}
.icon-xinxiliu:before {
content: "\e7a4";
}
.icon-xiaoshoushezhi:before {
content: "\e7a5";
}
.icon-sucaiguanli:before {
content: "\e7a9";
}
.icon-xueshengdaoru:before {
content: "\e7aa";
}
.icon-shangpinguanli:before {
content: "\e7ab";
}
.icon-paikeguanli:before {
content: "\e7ac";
}
.icon-xinxidaoru:before {
content: "\e7ad";
}
.icon-shoufeipeizhi:before {
content: "\e7ae";
}
.icon-yonghuquanxian:before {
content: "\e7af";
}
.icon-zaijixueshengguanli:before {
content: "\e7b0";
}
.icon-xuehaoguanli:before {
content: "\e7b1";
}
.icon-kechengziyuanguanli:before {
content: "\e7b2";
}
.icon-mianshoujiaoxueanpai:before {
content: "\e7b3";
}
.icon-zhangfang:before {
content: "\e7b4";
}
.icon-kaikeguanli:before {
content: "\e7b5";
}
.icon-biyetongji:before {
content: "\e7b6";
}
.icon-zhaoshengzhunbei:before {
content: "\e7b8";
}
.icon-paikeshezhi:before {
content: "\e7b9";
}
.icon-banjiguanli:before {
content: "\e7ba";
}
.icon-jingpinketang:before {
content: "\e7bb";
}
.icon-yuangongtidian:before {
content: "\e7bc";
}
.icon-kaoshianpai:before {
content: "\e7bd";
}
.icon-wangluojiaoxueanpai:before {
content: "\e7bf";
}
.icon-ruxuechengji:before {
content: "\e7c3";
}
.icon-mianshoujiaoxue:before {
content: "\e7c6";
}
.icon-jiaoshijiaoshiguanli:before {
content: "\e7c7";
}
.icon-luquguanli:before {
content: "\e7c8";
}
.icon-luquchengji:before {
content: "\e7c9";
}
.icon-ziyuan:before {
content: "\e7ca";
}
.icon-kejian:before {
content: "\e7cc";
}
.icon-waibukejian:before {
content: "\e7cd";
}
.icon-rizhiguanli:before {
content: "\e7ce";
}
.icon-mobanguanli:before {
content: "\e7cf";
}
.icon-xuelirenzheng:before {
content: "\e7d1";
}
.icon-yiyichuli:before {
content: "\e7d2";
}
.icon-lunwenshenbao:before {
content: "\e7d3";
}
.icon-lunwenshezhi:before {
content: "\e7d4";
}
.icon-jiaoxuedianshezhi:before {
content: "\e7d5";
}
.icon-buluchenjiang:before {
content: "\e7d6";
}
.icon-mokuaishezhi:before {
content: "\e7d7";
}
.icon-ziliaoguanli:before {
content: "\e7d8";
}
.icon-jituanguanli:before {
content: "\e7d9";
}
.icon-yingyongguanli:before {
content: "\e7da";
}
.icon-guanwangshijuan:before {
content: "\e7db";
}
.icon-wodewangke:before {
content: "\e7dc";
}
.icon-jiaobenguanli:before {
content: "\e7dd";
}
.icon-zhuanyeguanliyuan:before {
content: "\e7de";
}
.icon-xueshengchengji:before {
content: "\e7df";
}
.icon-fuwuguanli:before {
content: "\e7e2";
}
.icon-daijinquan:before {
content: "\e7e3";
}
.icon-hujiaozhongxin:before {
content: "\e7e4";
}
.icon-yinjinshoufei:before {
content: "\e7e5";
}
.icon-yingjiaoqingdan:before {
content: "\e7e6";
}
.icon-duizhangdan:before {
content: "\e7e7";
}
.icon-shangjiguanli:before {
content: "\e7e8";
}
.icon-qiyehuihuacundang:before {
content: "\e7e9";
}
.icon-yonghushezhi:before {
content: "\e7ea";
}
.icon-xiaoxishezhi:before {
content: "\e7ec";
}
.icon-yingxiaoshezhi:before {
content: "\e7ed";
}
.icon-fuwushichang:before {
content: "\e7ee";
}
.icon-sucaiziyuan:before {
content: "\e7ef";
}
.icon-yingxiaowanfa:before {
content: "\e7f0";
}
.icon-tuiguang:before {
content: "\e7f1";
}
.icon-yonghuliebiao:before {
content: "\e7f2";
}
.icon-ziyuanguanli:before {
content: "\e692";
}
.icon-kechengguanli:before {
content: "\e693";
}
.icon-kechengbao:before {
content: "\e694";
}
.icon-tikuguanli:before {
content: "\e695";
}
.icon-wangkeshichang:before {
content: "\e696";
}
.icon-gongdan:before {
content: "\e697";
}
.icon-fangkeguanli:before {
content: "\e698";
}
.icon-xiansuoguanli:before {
content: "\e699";
}
.icon-kehuguanli:before {
content: "\e69a";
}
.icon-jituankehu:before {
content: "\e69b";
}
.icon-genjinjilu:before {
content: "\e69c";
}
.icon-hujiaoguanli:before {
content: "\e69d";
}
.icon-gongzuotai:before {
content: "\e69e";
}
.icon-shujubaobiao:before {
content: "\e69f";
}
.icon-fangkebaobiao:before {
content: "\e6a0";
}
.icon-zhangbuguanli:before {
content: "\e6a1";
}
.icon-zhangbuguanli_zi:before {
content: "\e6a2";
}
.icon-zhangbuguanli_zixitong_A:before {
content: "\e6a3";
}
.icon-hetongguanli:before {
content: "\e6a4";
}
.icon-yunyingzheguanli:before {
content: "\e6a5";
}
.icon-zhaopinguanli:before {
content: "\e6a6";
}
.icon-gongziguanli:before {
content: "\e6a7";
}
.icon-wodeshenpi:before {
content: "\e6a8";
}
.icon-biaozhunmobanshezhi:before {
content: "\e6a9";
}
.icon-jichushezhi:before {
content: "\e6aa";
}
.icon-caiwushezhi:before {
content: "\e6ab";
}
.icon-chanpinshezhi:before {
content: "\e6ac";
}
.icon-shenpishezhi:before {
content: "\e6ad";
}
.icon-mubiaoguanli:before {
content: "\e6ae";
}
.icon-zhandianshezhi:before {
content: "\e6af";
}
.icon-renshishezhi:before {
content: "\e6b0";
}
.icon-CRMshezhi:before {
content: "\e6b1";
}
.icon-mingpianshezhi:before {
content: "\e6b2";
}
.icon-wangxiaoshezhi:before {
content: "\e6b3";
}
.icon-wodedianping:before {
content: "\e6b4";
}
.icon-wodexuesheng:before {
content: "\e6b5";
}
.icon-lianxijilu:before {
content: "\e6b8";
}
.icon-tousutiwen:before {
content: "\e6b9";
}
.icon-peixunjihua:before {
content: "\e6ba";
}
.icon-feiyongchaxun:before {
content: "\e6bb";
}
.icon-xueshengjiaofei:before {
content: "\e6bc";
}
.icon-jizhang:before {
content: "\e6bd";
}
.icon-chaxun:before {
content: "\e6be";
}
.icon-chazhang:before {
content: "\e6bf";
}
.icon-baobiao:before {
content: "\e6c0";
}
.icon-shezhi:before {
content: "\e6c2";
}
.icon-daqiajilu:before {
content: "\e6ce";
}
.icon-wangluobanji:before {
content: "\e6d3";
}
.icon-wangxiaoshezhi1:before {
content: "\e6d6";
}
.icon-houtaishezhi:before {
content: "\e6d8";
}
.icon-zhaoshengshezhi:before {
content: "\e6db";
}
.icon-xiaoxizhongxin:before {
content: "\e6df";
}
.icon-zhaoshengbaobiao:before {
content: "\e6e1";
}
.icon-caidanguanli:before {
content: "\e6e2";
}
.icon-jituanshezhi:before {
content: "\e6e3";
}
.icon-shichangguanli:before {
content: "\e6e4";
}
.icon-chuangjianxitong:before {
content: "\e6e5";
}
.icon-gongdanguanli:before {
content: "\e6e6";
}
.icon-duanxin:before {
content: "\e6e7";
}
.icon-bangzhuzhongxin:before {
content: "\e6e8";
}

View File

@ -1,55 +1,67 @@
.main-body{padding:0;}
.ittab-bg-gray {background-color:#1c2b36;}
.layui-layout-admin .layui-header {height:50px;background-color:#fff;}
.layui-layout-admin .layui-logo {line-height:50px;cursor:pointer;font-size:16px;color:#fff;background:#1C2B36;width:200px;}
.main-body{padding:0;min-width: 1220px;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;}
.layui-layout-admin .layui-header {height:49px;background-color:#fff;box-shadow: 0 2px 6px 0 rgb(5 32 96 / 10%);}
.layui-layout-admin .layui-logo {line-height:49px;cursor:pointer;font-size:16px;color:#fff;background:#001529;width:200px;border-bottom: 1px solid #001529;}
.layui-layout-admin .layui-side {top:50px;width:200px;border-right:1px solid #ddd;}
.layui-nav .layui-nav-item {line-height:45px;}
.layui-nav.layui-layout-left {color:#333;margin-left:10px;}
.layui-nav.layui-layout-left input {border:0;}
.layui-layout-admin .layui-body {top:50px;padding:0px;padding-right:0px;padding-bottom:0px;bottom:0px;left:200px;z-index:1017;overflow:visible;right:0;background-color:#eff0f4;}
.layui-header .layui-nav-item {line-height:49px; height:49px; border-left: 1px solid #eee;position: relative;display: inline-block; *display: inline; *zoom: 1; vertical-align: middle;}
.layui-header .layui-nav-item a{padding: 0 12px; text-align: center; min-width: 24px;}
.layui-header.layui-layout-left {color:#333;margin-left:10px;}
.layui-header.layui-layout-left input {border:0;}
.layui-header .layui-nav-bar {display:none;}
.layui-layout-right{padding: 0 3px; background-color:#fff;}
.layui-header .layui-nav-item #ittab-refresh {color:#000;}
.layui-header .layui-nav-item #ittab-refresh i {font-size:16px;}
.layui-header .layui-nav-item #ittab-del-cache{color:#000}
.layui-header .layui-nav-item #ittab-del-cache i{font-size:16px}
.layui-header.layui-layout-right .layui-nav-bar {background-color: #fff;}
.layui-tab-brief>.layui-tab-more li.layui-this:after {border-bottom: 0;}
.layui-nav-img {width:25px;height:25px;margin-right:0;}
.layui-header .msg-num { min-width: 18px;height: 18px;position: absolute;top: -10px;right: 5px;display: none;}
.layui-header .msg-num a {min-width: 18px; height: 18px; margin: 0; padding: 0; display: inline-block; font-size: 11px;line-height: 18px;text-align: center; background-color: #FF5722; color: #fff;border-radius: 12px; cursor: pointer;}
.ittab-menulist {width:100%;height:100%; border-right:1px solid #ccc; font-size:14px; color:#8dacc4;}
.ittab-menulist-top {padding: 10px 12px; font-size:0; border-bottom: 1px solid #17232c; text-align:center;}
.ittab-menulist-top a {background-color:#34a853; opacity:1; width: 25%; margin:0; padding: 5px 0; display:inline-block;}
.ittab-menulist-top .layui-icon {color:#fff;font-size:16px;}
.ittab-menulist-top a:first-child {border-radius: 3px 0 0 3px;}
.ittab-menulist-top a:last-child {border-radius: 0 3px 3px 0;}
.ittab-menulist-top a:hover{opacity: .9;}
.layui-layout-admin .layui-body {top:50px; z-index:1008; padding:0;padding-right:0;padding-bottom:0;bottom:0;left:200px;overflow:visible;right:0;background-color:#F5F8FA;}
.ittab-menulist-1 li{height:44px; line-height:44px; cursor:pointer; list-style:none;}
.ittab-menulist-2 {height:48px;line-height:48px;position:relative;padding-left:12px; cursor: pointer;}
.ittab-menulist-1 li:hover,.ittab-menulist-2:hover {background-color: rgba(255,255,255,.1)}
.ittab-menulist-1 .iconfont{font-size: 16px;}
.ittab-menulist-1 .site-menu-active span{padding-left:29px; border-left: 3px solid#131E25; width: 168px; display: inline-block;}
.ittab-menulist-1 li:hover span{border-color: rgba(255,255,255,.1)}
.ittab-menulist-1 li.layui-this span{border-color:#E94335 !important; color:#fff !important; background-color: rgba(255,255,255,.1);}
.ittab-menulist-1 li .layui-icon-triangle-r{float:right; margin-right:16px;}
.ittab-menulist-1 li .layui-icon-triangle-d{float:right; margin-right:16px;}
.menulist-bg-gray{background-color:#001529;}
.menulist {width:100%;height:100%; border-right:1px solid #ccc; font-size:14px; color:#aaaaaa;}
.ittab-menulist-3 {display:none;cursor:pointer;font-size:13px;}
.ittab-menulist-3 li {background-color: #131E25;}
.tab-menulist-4 li {padding-left:45px; background-color: #131E25;}
.tab-menulist-5 li {padding-left:62px; background-color: #131E25;}
.menulist-top {padding: 10px 12px; font-size:0; border-bottom: 1px solid #17232c; text-align:center;}
.menulist-top a {background-color:#34a853; opacity:1; width: 25%; margin:0; padding: 5px 0; display:inline-block;}
.menulist-top .layui-icon {color:#fff;font-size:16px;}
.menulist-top a:first-child {border-radius: 3px 0 0 3px;}
.menulist-top a:last-child {border-radius: 0 3px 3px 0;}
.menulist-top a:hover{opacity: .9;}
.menulist .layui-nav{background-color:#001529;}
.menulist .layui-nav-tree .layui-nav-bar{width:4px;background-color:#E94335}
.layui-nav-tree .layui-nav-child{padding:0;}
.layui-nav-tree .layui-nav-child dd.layui-this, .layui-nav-tree .layui-nav-child dd.layui-this a, .layui-nav-tree .layui-this, .layui-nav-tree .layui-this>a, .layui-nav-tree .layui-this>a:hover{background-color:#131E25}
.layui-nav .layui-nav-item a{padding-left:12px;}
.layui-nav .layui-nav-item a.menu-b{padding-left:32px;}
.layui-nav .layui-nav-item a.menu-c{padding-left:45px;}
.layui-nav .layui-nav-item a.menu-d{padding-left:58px;}
.gougu-admin-tab {margin:0;}
.gougu-admin-tab .layui-icon-prev {position:absolute;top:-50px; left:0; width:39px; height:50px; line-height:50px; color: #999; text-align:center; cursor:pointer; background-color:#fff;border-right: 1px solid #f1f2f7;}
.gougu-admin-tab .layui-icon-prev:hover{color: #333;}
.gougu-admin-tab .layui-icon-next {position:absolute;top:-50px; right:152px; width:39px; height:50px; line-height:50px; color: #999; text-align:center; cursor:pointer; background-color:#fff;border-left: 1px solid #f1f2f7;}
.gougu-admin-tab .layui-icon-next:hover{color: #333;}
.gougu-admin-tab .layui-tab-title {position:absolute;top:-50px;height:50px;left:36px; border:0;max-width:calc(100% - 226px); overflow:hidden;}
.gougu-admin-tab .layui-icon-prev,.gougu-admin-tab .layui-icon-next {position:absolute;top:-50px; width:39px; height:49px; line-height:49px; color: #999; text-align:center; cursor:pointer; background-color:#fff;}
.gougu-admin-tab .layui-icon-prev{left:0; border-right: 1px solid #eee;}
.gougu-admin-tab .layui-icon-next {right:152px; border-left: 1px solid #eee;}
.gougu-admin-tab .layui-icon-prev:hover,.gougu-admin-tab .layui-icon-next:hover{color: #333;}
.gougu-admin-tab .layui-tab-title li {min-width:36px; padding:0 24px 0 12px; color:#666;font-size:12px;line-height:48px;border-top:3px solid #fff; border-right: 1px solid #f1f2f7; background-color:#fff;}
.gougu-admin-tab .layui-tab-title {position:absolute;top:-50px; z-index:58; height:49px;left:40px; border:0;max-width:calc(100% - 226px); overflow:hidden;}
.gougu-admin-tab .layui-tab-title li {min-width:36px; padding:0 24px 0 12px; color:#666;font-size:12px;line-height:48px;border-top:3px solid #fff; border-right: 1px solid #F5F8FA; background-color:#fff;}
.gougu-admin-tab .layui-tab-title li .gougu-tab-active {display: inline-block; background-color: #999; width: 8px; height: 8px; border-radius: 20px; margin-right: 6px;}
.gougu-admin-tab .layui-tab-title li .layui-tab-close {position:absolute;width:15px;height:15px;line-height:16px;top:16px;right:5px;font-size:10px;display:none;border-radius:50%;}
.gougu-admin-tab .layui-tab-title li:hover {color:#333;background-color:#f1f2f7;border-top:3px solid #333;}
.gougu-admin-tab .layui-tab-title li:hover {color:#333;background-color:#F5F8FA;border-top:3px solid #333;}
.gougu-admin-tab .layui-tab-title li:hover .gougu-tab-active {background-color:#333}
.gougu-admin-tab .layui-tab-title li:hover .layui-tab-close {display:inline-block;}
.gougu-admin-tab .layui-tab-title li .layui-tab-close:hover {background-color:#E94335;color:#fff;}
.gougu-admin-tab .layui-tab-title li.layui-this {color:#333;background-color:#f1f2f7;border-top:3px solid #E94335;}
.gougu-admin-tab .layui-tab-title li.layui-this {color:#333;background-color:#F5F8FA;border-top:3px solid #E94335;}
.gougu-admin-tab .layui-tab-title li.layui-this .gougu-tab-active{background-color:#E94335;}
.gougu-admin-tab .layui-tab-title li.layui-this .layui-tab-close{display:inline-block;}
@ -59,16 +71,7 @@
.gougu-admin-tab .layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after {border:0;}
.gougu-admin-tab .layui-tab-item {height:100%;}
.gougu-admin-tab .layui-tab-bar { height: 50px;border-width: 0;line-height: 50px;}
.gougu-admin-tab .layui-tab-bar {height: 50px;border-width: 0;line-height: 50px;}
.layui-layout-right{padding: 0 3px; background-color:#fff;}
.layui-nav .layui-nav-item a{padding: 0 12px; text-align: center; min-width: 24px; border-left: 1px solid #eee;}
.layui-nav .layui-nav-item #ittab-refresh {color:#000;}
.layui-nav .layui-nav-item #ittab-refresh i {font-size:16px;}
.layui-nav .layui-nav-item #ittab-del-cache{color:#000}
.layui-nav .layui-nav-item #ittab-del-cache i{font-size:16px}
.layui-nav.layui-layout-right .layui-nav-bar {background-color: #fff;}
.layui-tab-brief>.layui-tab-more li.layui-this:after {border-bottom: 0;}
.layui-nav-img {width:25px;height:25px;margin-right:0;}
.layui-layout-admin .layui-footer {left:200px;height:30px;line-height:30px;background-color:#f0f0f0;font-size:12px;}
.layui-tab-content {padding:0px;}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 1322180 */
src: url('iconfont.woff2?t=1626055526638') format('woff2'),
url('iconfont.woff?t=1626055526638') format('woff'),
url('iconfont.ttf?t=1626055526638') format('truetype');
font-family: "iconfont"; /* Project id 2936988 */
src: url('iconfont.woff2?t=1640935732189') format('woff2'),
url('iconfont.woff?t=1640935732189') format('woff'),
url('iconfont.ttf?t=1640935732189') format('truetype');
}
.iconfont {
@ -13,163 +13,899 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-fenxiao:before {
content: "\e618";
.icon-xueshengyidong:before {
content: "\e6e9";
}
.icon-dingdan:before {
content: "\e620";
.icon-baokao:before {
content: "\e6ea";
}
.icon-chengji:before {
content: "\e6eb";
}
.icon-yuejuan:before {
content: "\e6ec";
}
.icon-kaoheshezhi:before {
content: "\e6ed";
}
.icon-lunwenguanli:before {
content: "\e6ee";
}
.icon-shenbao:before {
content: "\e6ef";
}
.icon-kecheng:before {
content: "\e609";
content: "\e6f0";
}
.icon-banji:before {
.icon-tiku:before {
content: "\e6f1";
}
.icon-jiaowushezhi:before {
content: "\e6f2";
}
.icon-zidingyishezhi:before {
content: "\e6f3";
}
.icon-chaojitongji:before {
content: "\e6f4";
}
.icon-shangpin:before {
content: "\e64f";
.icon-zhaoshengtongji:before {
content: "\e6f5";
}
.icon-shuju:before {
content: "\e625";
.icon-tuiguangtongji:before {
content: "\e6f6";
}
.icon-wangzhan:before {
content: "\e652";
.icon-xuexitongji:before {
content: "\e6f7";
}
.icon-sheji:before {
content: "\e65e";
.icon-diqushujutongji:before {
content: "\e6f8";
}
.icon-yunying:before {
content: "\e607";
.icon-shujudaoru:before {
content: "\e6f9";
}
.icon-houduankaifa:before {
content: "\e606";
.icon-chengkaoguanli:before {
content: "\e6fb";
}
.icon-qianduankaifa:before {
content: "\e608";
.icon-yuanchengguanli:before {
content: "\e6fe";
}
.icon-yidongkaifa:before {
content: "\e610";
.icon-shujiguanli:before {
content: "\e6ff";
}
.icon-chanpin:before {
content: "\e6c7";
.icon-guochengxingkaohe:before {
content: "\e700";
}
.icon-ceshi:before {
content: "\e669";
.icon-xuefenrending:before {
content: "\e701";
}
.icon-guize:before {
content: "\ebb8";
.icon-kechengdingdan:before {
content: "\e702";
}
.icon-yunyingzhongxin:before {
content: "\ebd0";
.icon-wentifankui:before {
content: "\e703";
}
.icon-zhihangfankui:before {
content: "\ec35";
.icon-zichan:before {
content: "\e704";
}
.icon-gongdanqueren:before {
content: "\ec36";
.icon-KPIguanli:before {
content: "\e705";
}
.icon-gongdan:before {
content: "\ec37";
.icon-xiangmuguanli:before {
content: "\e706";
}
.icon-xiaoxi:before {
content: "\ec3b";
.icon-weixingongzhonghao:before {
content: "\e707";
}
.icon-iframetianjia:before {
content: "\ec7d";
.icon-anquanshezhi:before {
content: "\e708";
}
.icon-jichuguanli:before {
content: "\eb64";
.icon-fuwuzhongxin:before {
content: "\e709";
}
.icon-ceshishenqing:before {
content: "\eb61";
.icon-qiyefuwu:before {
content: "\e70a";
}
.icon-peiwangyindao:before {
content: "\eb66";
.icon-wangkefuwu:before {
content: "\e70b";
}
.icon-renjijiaohu:before {
content: "\eb68";
.icon-shoufeiguanli:before {
content: "\e70c";
}
.icon-shujukanban:before {
content: "\eb69";
.icon-quanxianshezhi:before {
content: "\e70d";
}
.icon-icon_zhanghao:before {
content: "\eb8a";
.icon-jiaowutongji:before {
content: "\e70f";
}
.icon-wumoxing:before {
content: "\ec33";
.icon-jiaoxuetongji:before {
content: "\e710";
}
.icon-daibanshixiang:before {
content: "\ec4e";
.icon-shoufeitongji:before {
content: "\e711";
}
.icon-liujisuan:before {
content: "\ec56";
.icon-fuwutongji:before {
content: "\e713";
}
.icon-zhexiantu:before {
content: "\ec66";
.icon-tongzhitongji:before {
content: "\e714";
}
.icon-hezuohuobanmiyueguanli:before {
content: "\eb63";
.icon-kaohetongji:before {
content: "\e715";
}
.icon-quanxianshenpi:before {
content: "\eb65";
.icon-yonghuhuoyuedu:before {
content: "\e716";
}
.icon-xueshengbaoming:before {
content: "\e717";
}
.icon-xueshengluqu:before {
content: "\e718";
}
.icon-xueshengzhuce:before {
content: "\e719";
}
.icon-zaijixuesheng:before {
content: "\e71a";
}
.icon-huamingce:before {
content: "\e71b";
}
.icon-fenleiguanli:before {
content: "\e71c";
}
.icon-fuwuliebiao:before {
content: "\e71d";
}
.icon-fenleiliebiao:before {
content: "\e71e";
}
.icon-tongzhiliebiao:before {
content: "\e71f";
}
.icon-jiaoxuejihua:before {
content: "\e720";
}
.icon-jiaoxueanpai:before {
content: "\e721";
}
.icon-chengjiguanli:before {
content: "\e722";
}
.icon-tupianguanli:before {
content: "\e723";
}
.icon-kaoshijihua:before {
content: "\e724";
}
.icon-kaoshipeizhi:before {
content: "\e725";
}
.icon-xuexizhongxinguanli:before {
content: "\e726";
}
.icon-kaoheguanli:before {
content: "\e728";
}
.icon-jiaoshiguanli:before {
content: "\e729";
}
.icon-wangkeguanli:before {
content: "\e72a";
}
.icon-bulujiesuan:before {
content: "\e72b";
}
.icon-biyeguanli:before {
content: "\e72c";
}
.icon-kaohezhibiao:before {
content: "\e72d";
}
.icon-qiyeguanli:before {
content: "\e77e";
}
.icon-chubuguanli:before {
content: "\e77f";
}
.icon-hujiaobaobiao:before {
content: "\e780";
}
.icon-saomiaodianjing:before {
content: "\e781";
}
.icon-jiezhang:before {
content: "\e782";
}
.icon-xiaoshoubaobiao:before {
content: "\e783";
}
.icon-pingzheng:before {
content: "\e784";
}
.icon-hetongyidong:before {
content: "\e785";
}
.icon-xiaoshoupin:before {
content: "\e787";
}
.icon-xueshuguanli:before {
content: "\e788";
}
.icon-yihaopin:before {
content: "\e789";
}
.icon-renwuguanli:before {
content: "\e78a";
}
.icon-dianshang:before {
content: "\e78b";
}
.icon-mingpianbaobiao_1:before {
content: "\e78c";
}
.icon-gudingzichan:before {
content: "\e78d";
}
.icon-dongtaiguanli:before {
content: "\e78e";
}
.icon-jichupeizhi:before {
content: "\e78f";
}
.icon-hujiaotongji:before {
content: "\e790";
}
.icon-xiaoshoubaobiao_1:before {
content: "\e791";
}
.icon-dashuju:before {
content: "\e792";
}
.icon-huodongguanli:before {
content: "\e793";
}
.icon-hujiaoshezhi:before {
content: "\e794";
}
.icon-fenxiaoshichang:before {
content: "\e795";
}
.icon-chengjitongji:before {
content: "\e796";
}
.icon-tuiguangshezhi:before {
content: "\e797";
}
.icon-kechengzhongxin:before {
content: "\e798";
}
.icon-hetongshezhi:before {
content: "\e799";
}
.icon-kechengbaoguanli:before {
content: "\e79a";
}
.icon-yonghuguanli:before {
content: "\e79b";
}
.icon-yonghuhuaxiang:before {
content: "\e79c";
}
.icon-zhanghaoguanli:before {
content: "\e79d";
}
.icon-SEMguanli:before {
content: "\e79e";
}
.icon-yusuan:before {
content: "\e79f";
}
.icon-mingpianbaobiao:before {
content: "\e7a0";
}
.icon-dingdanguanli:before {
content: "\e7a1";
}
.icon-tuiguangguanli:before {
content: "\e7a2";
}
.icon-zhuantiguanli:before {
content: "\e7a3";
}
.icon-xinxiliu:before {
content: "\e7a4";
}
.icon-xiaoshoushezhi:before {
content: "\e7a5";
}
.icon-sucaiguanli:before {
content: "\e7a9";
}
.icon-xueshengdaoru:before {
content: "\e7aa";
}
.icon-shangpinguanli:before {
content: "\e7ab";
}
.icon-paikeguanli:before {
content: "\e7ac";
}
.icon-xinxidaoru:before {
content: "\e7ad";
}
.icon-shoufeipeizhi:before {
content: "\e7ae";
}
.icon-yonghuquanxian:before {
content: "\e7af";
}
.icon-zaijixueshengguanli:before {
content: "\e7b0";
}
.icon-xuehaoguanli:before {
content: "\e7b1";
}
.icon-kechengziyuanguanli:before {
content: "\e7b2";
}
.icon-mianshoujiaoxueanpai:before {
content: "\e7b3";
}
.icon-zhangfang:before {
content: "\e7b4";
}
.icon-kaikeguanli:before {
content: "\e7b5";
}
.icon-biyetongji:before {
content: "\e7b6";
}
.icon-zhaoshengzhunbei:before {
content: "\e7b8";
}
.icon-paikeshezhi:before {
content: "\e7b9";
}
.icon-banjiguanli:before {
content: "\e7ba";
}
.icon-jingpinketang:before {
content: "\e7bb";
}
.icon-yuangongtidian:before {
content: "\e7bc";
}
.icon-kaoshianpai:before {
content: "\e7bd";
}
.icon-wangluojiaoxueanpai:before {
content: "\e7bf";
}
.icon-ruxuechengji:before {
content: "\e7c3";
}
.icon-mianshoujiaoxue:before {
content: "\e7c6";
}
.icon-jiaoshijiaoshiguanli:before {
content: "\e7c7";
}
.icon-luquguanli:before {
content: "\e7c8";
}
.icon-luquchengji:before {
content: "\e7c9";
}
.icon-ziyuan:before {
content: "\e7ca";
}
.icon-kejian:before {
content: "\e7cc";
}
.icon-waibukejian:before {
content: "\e7cd";
}
.icon-rizhiguanli:before {
content: "\e7ce";
}
.icon-mobanguanli:before {
content: "\e7cf";
}
.icon-xuelirenzheng:before {
content: "\e7d1";
}
.icon-yiyichuli:before {
content: "\e7d2";
}
.icon-lunwenshenbao:before {
content: "\e7d3";
}
.icon-lunwenshezhi:before {
content: "\e7d4";
}
.icon-jiaoxuedianshezhi:before {
content: "\e7d5";
}
.icon-buluchenjiang:before {
content: "\e7d6";
}
.icon-mokuaishezhi:before {
content: "\e7d7";
}
.icon-ziliaoguanli:before {
content: "\e7d8";
}
.icon-jituanguanli:before {
content: "\e7d9";
}
.icon-yingyongguanli:before {
content: "\eb67";
content: "\e7da";
}
.icon-icon_shezhi:before {
content: "\eb8d";
.icon-guanwangshijuan:before {
content: "\e7db";
}
.icon-shebeiguanli:before {
content: "\ebb7";
.icon-wodewangke:before {
content: "\e7dc";
}
.icon-zuzhiqunzu:before {
content: "\ebd8";
.icon-jiaobenguanli:before {
content: "\e7dd";
}
.icon-weizhigeshi:before {
content: "\ec1a";
.icon-zhuanyeguanliyuan:before {
content: "\e7de";
}
.icon-chucun:before {
content: "\ec5e";
.icon-xueshengchengji:before {
content: "\e7df";
}
.icon-get:before {
content: "\ec64";
.icon-fuwuguanli:before {
content: "\e7e2";
}
.icon-daijinquan:before {
content: "\e7e3";
}
.icon-hujiaozhongxin:before {
content: "\e7e4";
}
.icon-yinjinshoufei:before {
content: "\e7e5";
}
.icon-yingjiaoqingdan:before {
content: "\e7e6";
}
.icon-duizhangdan:before {
content: "\e7e7";
}
.icon-shangjiguanli:before {
content: "\e7e8";
}
.icon-qiyehuihuacundang:before {
content: "\e7e9";
}
.icon-yonghushezhi:before {
content: "\e7ea";
}
.icon-xiaoxishezhi:before {
content: "\e7ec";
}
.icon-yingxiaoshezhi:before {
content: "\e7ed";
}
.icon-fuwushichang:before {
content: "\e7ee";
}
.icon-sucaiziyuan:before {
content: "\e7ef";
}
.icon-yingxiaowanfa:before {
content: "\e7f0";
}
.icon-tuiguang:before {
content: "\e7f1";
}
.icon-yonghuliebiao:before {
content: "\e7f2";
}
.icon-ziyuanguanli:before {
content: "\e692";
}
.icon-kechengguanli:before {
content: "\e693";
}
.icon-kechengbao:before {
content: "\e694";
}
.icon-tikuguanli:before {
content: "\e695";
}
.icon-wangkeshichang:before {
content: "\e696";
}
.icon-gongdan:before {
content: "\e697";
}
.icon-fangkeguanli:before {
content: "\e698";
}
.icon-xiansuoguanli:before {
content: "\e699";
}
.icon-kehuguanli:before {
content: "\e69a";
}
.icon-jituankehu:before {
content: "\e69b";
}
.icon-genjinjilu:before {
content: "\e69c";
}
.icon-hujiaoguanli:before {
content: "\e69d";
}
.icon-gongzuotai:before {
content: "\e69e";
}
.icon-shujubaobiao:before {
content: "\e69f";
}
.icon-fangkebaobiao:before {
content: "\e6a0";
}
.icon-zhangbuguanli:before {
content: "\e6a1";
}
.icon-zhangbuguanli_zi:before {
content: "\e6a2";
}
.icon-zhangbuguanli_zixitong_A:before {
content: "\e6a3";
}
.icon-hetongguanli:before {
content: "\e6a4";
}
.icon-yunyingzheguanli:before {
content: "\e6a5";
}
.icon-zhaopinguanli:before {
content: "\e6a6";
}
.icon-gongziguanli:before {
content: "\e6a7";
}
.icon-wodeshenpi:before {
content: "\e6a8";
}
.icon-biaozhunmobanshezhi:before {
content: "\e6a9";
}
.icon-jichushezhi:before {
content: "\e6aa";
}
.icon-caiwushezhi:before {
content: "\e6ab";
}
.icon-chanpinshezhi:before {
content: "\e6ac";
}
.icon-shenpishezhi:before {
content: "\e6ad";
}
.icon-mubiaoguanli:before {
content: "\e6ae";
}
.icon-zhandianshezhi:before {
content: "\e6af";
}
.icon-renshishezhi:before {
content: "\e6b0";
}
.icon-CRMshezhi:before {
content: "\e6b1";
}
.icon-mingpianshezhi:before {
content: "\e6b2";
}
.icon-wangxiaoshezhi:before {
content: "\e6b3";
}
.icon-wodedianping:before {
content: "\e6b4";
}
.icon-wodexuesheng:before {
content: "\e6b5";
}
.icon-lianxijilu:before {
content: "\e6b8";
}
.icon-tousutiwen:before {
content: "\e6b9";
}
.icon-peixunjihua:before {
content: "\e6ba";
}
.icon-feiyongchaxun:before {
content: "\e6bb";
}
.icon-xueshengjiaofei:before {
content: "\e6bc";
}
.icon-jizhang:before {
content: "\e6bd";
}
.icon-chaxun:before {
content: "\e6be";
}
.icon-chazhang:before {
content: "\e6bf";
}
.icon-baobiao:before {
content: "\e6c0";
}
.icon-shezhi:before {
content: "\e6c2";
}
.icon-daqiajilu:before {
content: "\e6ce";
}
.icon-wangluobanji:before {
content: "\e6d3";
}
.icon-wangxiaoshezhi1:before {
content: "\e6d6";
}
.icon-houtaishezhi:before {
content: "\e6d8";
}
.icon-zhaoshengshezhi:before {
content: "\e6db";
}
.icon-xiaoxizhongxin:before {
content: "\e6df";
}
.icon-zhaoshengbaobiao:before {
content: "\e6e1";
}
.icon-caidanguanli:before {
content: "\e6e2";
}
.icon-jituanshezhi:before {
content: "\e6e3";
}
.icon-shichangguanli:before {
content: "\e6e4";
}
.icon-chuangjianxitong:before {
content: "\e6e5";
}
.icon-gongdanguanli:before {
content: "\e6e6";
}
.icon-duanxin:before {
content: "\e6e7";
}
.icon-bangzhuzhongxin:before {
content: "\e6e8";
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,104 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="jichuguanli" unicode="&#60260;" d="M941.44 30.528a447.808 447.808 0 0 1-397.44 320V544h128a32 32 0 0 1 32 32V704a32 32 0 0 1-32 32H352a32 32 0 0 1-32-32v-128a32 32 0 0 1 32-32h128v-193.472a447.84 447.84 0 0 1-397.504-320A64 64 0 1 1 160-32c0 16.48-6.4 31.36-16.64 42.688A384 384 0 0 0 480 286.496v-263.392c-19.04-11.072-32-31.488-32-55.136a64 64 0 0 1 128 0c0 23.616-12.96 44.032-32 55.136v263.392a383.936 383.936 0 0 0 336.608-275.872A63.36 63.36 0 0 1 864-32a64 64 0 0 1 128 0 64 64 0 0 1-50.56 62.528zM288 416h77.472a32 32 0 0 1 0 64H288a32 32 0 0 0-32 32V768a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32v-256a32 32 0 0 0-32-32h-90.624a32 32 0 0 1 0-64H736a96 96 0 0 1 96 96V768a96 96 0 0 1-96 96H288a96 96 0 0 1-96-96v-256a96 96 0 0 1 96-96z" horiz-adv-x="1024" />
<glyph glyph-name="hezuohuobanmiyueguanli" unicode="&#60259;" d="M928 352h-96v64h96a32 32 0 0 1 0 64h-128a32 32 0 0 1-32-32v-227.84A143.872 143.872 0 0 1 800-64a144 144 0 0 1 144 144 143.904 143.904 0 0 1-112 140.16V288h96a32 32 0 0 1 0 64z m-48-272a80 80 0 1 0-160 0 80 80 0 0 0 160 0zM572.608 9.248l-0.864-0.288c-198.752-14.464-419.68 2.464-466.592 26.912 11.264 30.208 82.88 74.784 222.88 90.144a32 32 0 0 1 28.512 31.808v38.048c0 10.848-5.504 20.96-14.624 26.88-51.2 33.088-96.128 87.552-123.264 149.376a32.256 32.256 0 0 1-15.04 15.808c-8.672 4.32-21.728 19.904-34.656 69.696-4.96 19.072-1.568 32.768 10.624 43.04 6.816 5.76 10.912 14.08 11.328 23.008C197.76 676.672 283.2 768 419.392 768c133.472 0 215.104-86.528 223.936-237.376 0.608-10.144 5.984-19.392 14.464-24.928 12.992-8.48 16.896-20.608 12.384-38.144-12.544-48.288-25.024-58.464-29.856-60.576a31.968 31.968 0 0 1-17.056-18.176c-24.992-67.808-72.352-129.728-126.656-165.664a32 32 0 0 1-14.336-26.688v-38.592a32 32 0 0 1 28.512-31.808c11.296-1.216 28.96-3.968 53.056-8.16 17.376-2.912 33.984 8.672 36.992 26.048s-8.672 33.984-26.048 36.992a1699.968 1699.968 0 0 1-22.112 3.712c54.08 42.016 99.136 102.816 126.464 171.04 30.112 20.96 44.096 61.472 52.992 95.776 9.888 38.08 0.192 73.408-25.984 97.472C690.56 723.968 581.76 832 419.392 832c-168 0-278.848-111.776-291.712-292.672-22.816-25.6-30.368-60.448-20.672-97.728 13.984-53.856 31.904-86.784 57.28-104.512 28.224-60.224 71.04-114.144 120.48-152.192-150.176-23.328-245.216-83.328-245.216-157.088 0-9.088 2.816-22.56 16.192-35.008 43.2-40.064 211.488-52.864 360.32-52.864 61.408 0 119.52 2.176 164.128 5.536 2.496 0.192 4.96 0.672 7.36 1.44l4.512 1.44a32 32 0 0 1 20.704 40.224 31.776 31.776 0 0 1-40.16 20.672z" horiz-adv-x="1024" />
<glyph glyph-name="ceshishenqing" unicode="&#60257;" d="M607.232 0a32 32 0 1 0 0-64H192a96 96 0 0 0-96 96V736a96 96 0 0 0 96 96h544a96 96 0 0 0 96-96 32 32 0 0 0-64 0 32 32 0 0 1-32 32H192a32 32 0 0 1-32-32v-704a32 32 0 0 1 32-32h415.232zM832 310.24v-146.656c0-42.656-64-42.656-64 0v146.656c0 42.688 64 42.688 64 0zM288 576a32 32 0 1 0 0 64h224a32 32 0 0 0 0-64H288zM288 416a32 32 0 0 0 0 64h128a32 32 0 0 0 0-64H288zM639.424-30.592a32 32 0 1 0-64 0L576 96a96 96 0 0 0 96 96l127.744-1.152a32 32 0 1 0 0-64L672 128a32 32 0 0 1-32-32l-0.576-126.592zM637.92-51.648a32 32 0 1 0-44.32 46.208l180.384 172.992a32 32 0 1 0 44.288-46.176l-180.352-173.024zM880.896 561.472a31.424 31.424 0 0 1 3.328 44.416l-0.416 0.512a32 32 0 0 1-44.896 3.36L408.32 243.712l-15.2-51.84 58.336 4.544 429.44 365.056z m51.616 86.4a95.36 95.36 0 0 0-9.408-134.496l-438.08-372.448a32 32 0 0 0-18.24-7.52l-114.944-8.896a32 32 0 0 0-33.184 40.928l30.944 105.472a32 32 0 0 0 9.984 15.36L797.408 658.496a96 96 0 0 0 134.688-10.112l0.416-0.512z" horiz-adv-x="1024" />
<glyph glyph-name="peiwangyindao" unicode="&#60262;" d="M224 139.072h224a32 32 0 0 0 31.52-26.432c3.168-18.304 18.272-26.944 32.992-26.304 14.144-0.64 28.672 7.392 32.672 24.512 3.968 16.992 16.928 28.224 30.816 28.224h224a96 96 0 0 1 96 96V672a96 96 0 0 1-96 96h-224c-24.448 0-46.24-9.952-63.008-25.728A95.36 95.36 0 0 1 448 768H224a96 96 0 0 1-96-96v-436.928a96 96 0 0 1 96-96zM576 704h224a32 32 0 0 0 32-32v-436.928a32 32 0 0 0-32-32h-224c-11.2 0-21.984-2.048-32-5.824V665.376C544 687.36 559.072 704 576 704zM192 672a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32v-474.432a95.872 95.872 0 0 1-32 5.472H224a32 32 0 0 0-32 32V672zM957.984 608a32 32 0 0 1-32-32v-448a32 32 0 0 0-32-32h-224a96.096 96.096 0 0 1-83.168-48h-151.648A96.096 96.096 0 0 1 352 96H128a32 32 0 0 0-32 32V576a32 32 0 0 1-64 0v-448a96 96 0 0 1 96-96h224c14.688 0 27.392-9.984 31.008-23.968a32 32 0 0 1 31.008-24.032H608c14.592 0 27.36 9.888 31.008 24.032a32 32 0 0 0 30.976 23.968h224a96 96 0 0 1 96 96V576a32 32 0 0 1-32 32zM272 560h113.152a32 32 0 0 1 0 64H272a32 32 0 0 1 0-64zM272 432h113.152a32 32 0 0 1 0 64H272a32 32 0 0 1 0-64z" horiz-adv-x="1024" />
<glyph glyph-name="renjijiaohu" unicode="&#60264;" d="M948.448 360.512c-25.856 119.584-111.008 238.24-182.272 217.632-25.504-7.36-45.088-20.832-57.728-39.424-22.976 10.656-46.496 11.68-69.504 1.536a86.112 86.112 0 0 1-40.256-35.52c-26.496 13.408-56.96 13.12-88.896-1.856a107.2 107.2 0 0 1-19.232-11.456c-77.824 109.984-141.408 159.616-198.72 146.624-81.152-18.368-81.152-89.152-19.584-181.856l118.208-182.784c-64.864 12.192-111.776 1.728-139.584-35.424-45.472-60.8 2.656-116.96 114.4-167.232l215.968-96.064a32 32 0 0 1 26.016 58.464l-215.84 96c-43.552 19.584-72.32 37.952-85.568 53.44-7.68 8.96-7.904 11.456-3.712 17.056 15.808 21.12 64.928 21.12 150.56-10.816 28.864-10.784 54.784 21.472 38.048 47.36l-164.96 255.072C284.8 552.992 284.8 570.816 305.984 575.616c28.064 6.336 87.104-49.408 165.536-170.56 5.888-13.888 15.072-28.352 27.392-42.976 25.472-30.272 72.416 3.552 51.776 37.312a2035.2 2035.2 0 0 1-23.04 36.832c0.544 3.744 3.872 6.144 9.312 8.704 22.464 10.528 36.48 6.528 52.192-15.68 17.472-24.64 56.224-13.6 58.048 16.576 1.28 21.184 7.136 31.296 17.536 35.872 8.96 3.936 20.096 0.544 37.472-16a32 32 0 0 1 53.952 20.32c1.472 16.544 9.024 25.248 27.808 30.688 19.712 5.696 83.136-82.688 101.952-169.696 13.536-62.592 13.536-136.992-0.32-223.136a32 32 0 1 1 63.2-10.144c15.008 93.504 15.008 175.776-0.352 246.784zM300.8 0H164.256C144.352 0 128 16.608 128 37.344V730.656C128 751.392 144.352 768 164.256 768h375.456C559.648 768 576 751.392 576 730.656a32 32 0 0 1 64 0C640 786.528 595.232 832 539.744 832H164.256C108.768 832 64 786.528 64 730.656v-693.344C64-18.528 108.768-64 164.256-64H300.8a32 32 0 0 1 0 64z" horiz-adv-x="1024" />
<glyph glyph-name="quanxianshenpi" unicode="&#60261;" d="M509.088 307.008v23.872c35.936 22.816 70.656 62.88 89.536 112.064 13.408 5.696 23.04 21.824 30.816 50.56 6.016 22.304-3.648 36.992-16.672 45.12C606.368 643.616 543.808 704 448 704c-97.184 0-162.688-62.144-167.744-169.92-11.808-9.568-19.392-24.864-13.472-46.688 8.416-31.136 18.752-48.992 33.056-55.84 20.224-44.192 53.248-80.032 87.072-101.024v-23.52C292.896 297.088 224 264.864 224 226.624c0-46.144 448-46.144 448 0 0 38.24-68.896 70.464-162.912 80.384zM864 128V736a96 96 0 0 1-96 96H160a96 96 0 0 1-96-96v-608a96 96 0 0 1 96-96h608a96 96 0 0 1 96 96zM128 128V736a32 32 0 0 0 32 32h608a32 32 0 0 0 32-32v-608a32 32 0 0 0-32-32H160a32 32 0 0 0-32 32zM944.896 730.144a32 32 0 0 1-32-32v-679.104c0-19.84-16.064-35.904-35.904-35.904h-611.2a32 32 0 0 1 0-64h611.2a99.904 99.904 0 0 1 99.904 99.904V698.144a32 32 0 0 1-32 32z" horiz-adv-x="1024" />
<glyph glyph-name="shujukanban" unicode="&#60265;" d="M979.2 737.152a32 32 0 0 1-38.4 23.936l-166.848-38.656a32 32 0 0 1-15.808-53.408L794.56 631.36l-194.56-173.568-101.024 95.68a32 32 0 0 1-45.152-1.152l-216.736-227.264A64 64 0 1 1 288 262.4c0 6.944-1.376 13.472-3.424 19.712l193.536 202.944 99.232-93.952a32 32 0 0 1 43.296-0.64L839.04 585.28l41.504-42.976a32 32 0 0 1 53.92 13.92l44.448 165.408a31.84 31.84 0 0 1 0.288 15.52zM928 445.536a32 32 0 0 1-32-32V160a32 32 0 0 0-32-32H160a32 32 0 0 0-32 32V736a32 32 0 0 0 32 32h530.656a32 32 0 0 1 0 64H160a96 96 0 0 1-96-96v-576a96 96 0 0 1 96-96h704a96 96 0 0 1 96 96v253.536a32 32 0 0 1-32 32zM912 0h-800a32 32 0 0 1 0-64h800a32 32 0 0 1 0 64z" horiz-adv-x="1024" />
<glyph glyph-name="yingyongguanli" unicode="&#60263;" d="M384 800H192a96 96 0 0 1-96-96v-192a96 96 0 0 1 96-96h192a96 96 0 0 1 96 96V704a96 96 0 0 1-96 96z m32-288a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32V704a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192zM384 352H192a96 96 0 0 1-96-96v-192a96 96 0 0 1 96-96h192a96 96 0 0 1 96 96v192a96 96 0 0 1-96 96z m32-288a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192zM832 352h-192a96 96 0 0 1-96-96v-192a96 96 0 0 1 96-96h192a96 96 0 0 1 96 96v192a96 96 0 0 1-96 96z m32-288a32 32 0 0 0-32-32h-192a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192zM736 608m-192 0a192 192 0 1 1 384 0 192 192 0 1 1-384 0Z" horiz-adv-x="1024" />
<glyph glyph-name="icon_zhanghao" unicode="&#60298;" d="M620.256 89.824a32 32 0 0 0-28.256 31.776v80.736a32 32 0 0 0 13.216 25.92c52.864 38.272 99.168 99.68 124.736 169.152a32 32 0 0 0 19.584 19.2c9.76 3.36 21.536 24.224 32.416 70.72 5.92 25.152-1.024 40.96-16.576 50.4a32 32 0 0 0-15.264 24.48C736.448 714.688 650.144 800 514.24 800c-138.24 0-227.936-88.064-240.672-242.432a32 32 0 0 0-15.04-24.544c-16.416-10.24-22.272-23.36-16.224-44.032 11.392-38.88 23.84-60.352 36.8-68.48a32 32 0 0 0 13.12-16.384c25.088-70.496 72.224-133.536 126.72-173.504a32 32 0 0 0 13.056-25.792V121.6a32 32 0 0 0-28.256-31.776c-125.12-14.72-212.608-54.4-225.952-88.672 2.304-1.056 5.12-2.176 8.384-3.296 17.184-6.016 43.52-11.52 77.12-16.096 65.504-8.896 155.168-13.76 248.704-13.76s183.2 4.864 248.704 13.76c33.6 4.576 59.936 10.08 77.12 16.096 3.296 1.12 6.08 2.24 8.384 3.296-13.344 34.272-100.832 73.92-225.92 88.64z m35.744 59.776c151.36-22.656 256-79.168 256-157.376C912-74.784 755.84-96 512-96s-400 21.216-400 88.224c0 78.208 104.64 134.72 256 157.376V189.12c-56.64 45.536-104.576 110.944-132.576 184.128-23.936 19.392-40.928 51.296-54.528 97.792-12.8 43.648 0.064 81.344 30.336 106.592C231.456 755.52 346.336 864 514.24 864c165.6 0 276.992-105.728 298.08-281.44 29.44-24.864 42.72-63.904 31.968-109.856-13.312-56.768-30.848-92.512-58.976-109.632-28.448-70.624-74.976-133.184-129.312-176.576v-36.896z" horiz-adv-x="1024" />
<glyph glyph-name="icon_shezhi" unicode="&#60301;" d="M482.88 784l-17.28-90.688-20.64-4.512a309.696 309.696 0 0 1-99.776-41.088l-18.688-11.84-73.28 55.04-44.64-44.64 51.904-76.416-11.392-17.76a310.016 310.016 0 0 1-41.568-99.584l-4.8-21.6-90.72-12.896v-63.104l90.688-17.312 4.512-20.64a309.984 309.984 0 0 1 41.088-99.776l11.84-18.688-55.04-73.28 44.64-44.64 76.416 51.904 17.76-11.392a310.016 310.016 0 0 1 99.584-41.568l21.6-4.8 12.896-90.72h63.104l17.312 90.688 20.64 4.512a309.984 309.984 0 0 1 99.776 41.088l18.688 11.84 73.28-55.04 44.64 44.64-51.904 76.416 11.392 17.76a310.016 310.016 0 0 1 41.568 99.584l4.8 21.6 90.72 12.896V413.12l-90.688 17.312-4.512 20.64a309.984 309.984 0 0 1-41.088 99.776l-11.84 18.688 55.04 73.28-44.64 44.64-76.416-51.904-17.76 11.392a310.144 310.144 0 0 1-99.584 41.568l-21.6 4.8-12.896 90.72H482.88zM410.56 746.144l19.424 101.856h171.584l14.624-102.624c28-8.064 54.848-19.328 80.128-33.568l85.792 58.304 121.344-121.344-62.272-82.88c14.08-25.408 25.152-52.352 32.96-80.416l101.888-19.424v-171.584l-102.624-14.624a373.92 373.92 0 0 0-33.568-80.128l58.304-85.792-121.344-121.344-82.88 62.272c-25.408-14.08-52.352-25.152-80.416-32.96l-19.424-101.888h-171.584l-14.624 102.624a373.92 373.92 0 0 0-80.128 33.568L241.92-2.112l-121.344 121.344 62.272 82.88a373.824 373.824 0 0 0-32.96 80.416L48 301.952v171.584l102.624 14.624c8.064 27.968 19.328 54.848 33.568 80.128L125.888 654.08l121.344 121.344 82.88-62.272a373.856 373.856 0 0 0 80.416 32.96zM512 192a192 192 0 1 0 0 384 192 192 0 0 0 0-384z m0 64a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="guize" unicode="&#60344;" d="M864 736h-164.512A127.712 127.712 0 0 1 576 832a128 128 0 0 1 0-256 127.712 127.712 0 0 1 123.488 96H864a32 32 0 0 0 32-32v-288a32 32 0 0 0-32-32h-304a32 32 0 0 1 0-64H864a96 96 0 0 1 96 96V640a96 96 0 0 1-96 96z m-288-96a64 64 0 1 0 0.032 128.032A64 64 0 0 0 576 640zM832 192c-57.376 0-105.376-38.016-121.632-90.048H384a31.872 31.872 0 0 0-31.744 30.656A127.68 127.68 0 0 1 320 384c-47.264 0-88.064-25.888-110.24-64H160a32 32 0 0 0-32 32V640a32 32 0 0 0 32 32h208a32 32 0 0 1 0 64H160a96 96 0 0 1-96-96v-288a96 96 0 0 1 96-96h32a127.68 127.68 0 0 1 96.16-123.52A95.936 95.936 0 0 1 384 37.91999999999996h322.688A128 128 0 1 1 832 192zM256 256a64 64 0 1 0 128.032-0.032A64 64 0 0 0 256 256z m576-256a64 64 0 1 0 0.032 128.032A64 64 0 0 0 832 0z" horiz-adv-x="1024" />
<glyph glyph-name="shebeiguanli" unicode="&#60343;" d="M800 160H448a32 32 0 0 1 0-64h352a32 32 0 0 1 0 64zM800 416H448a32 32 0 0 1 0-64h352a32 32 0 0 1 0 64zM800 672H448a32 32 0 0 1 0-64h352a32 32 0 0 1 0 64zM304 160h-64a32 32 0 0 1 0-64h64a32 32 0 0 1 0 64zM304 416h-64a32 32 0 0 1 0-64h64a32 32 0 0 1 0 64zM304 672h-64a32 32 0 0 1 0-64h64a32 32 0 0 1 0 64zM864 800H160a96 96 0 0 1-96-96v-640a96 96 0 0 1 96-96h704a96 96 0 0 1 96 96V704a96 96 0 0 1-96 96z m32-736a32 32 0 0 0-32-32H160a32 32 0 0 0-32 32v160h672a32 32 0 0 1 0 64H128v192h672a32 32 0 0 1 0 64H128V704a32 32 0 0 0 32 32h704a32 32 0 0 0 32-32v-640z" horiz-adv-x="1024" />
<glyph glyph-name="yunyingzhongxin" unicode="&#60368;" d="M918.816 472.128a32 32 0 0 1-45.248 0.384c-23.552-23.168-45.92-41.6-67.296-55.552A95.296 95.296 0 0 1 768 442.112V672a32 32 0 0 1-64 0v-229.888a95.744 95.744 0 0 1-50.272-41.344c-4.544 2.56-9.184 4.672-13.632 7.84a643.936 643.936 0 0 0-74.016 61.824 1464.672 1464.672 0 0 0-14.88 14.4l-14.176 13.888c-11.456 11.168-19.712 18.88-28.032 26.048-20.8 17.952-41.056 30.72-63.104 39.136a95.904 95.904 0 0 1-189.728-18.368c-32.256-17.664-62.016-42.72-88.928-75.584a32 32 0 0 1 49.536-40.512c19.04 23.296 39.328 41.248 60.8 54.624a95.68 95.68 0 0 1 42.432-30.176V224a32 32 0 0 1 64 0v229.888a95.52 95.52 0 0 1 51.712 44.032c10.336-5.472 20.544-12.16 31.488-21.6 7.136-6.144 14.56-13.088 25.152-23.424l14.08-13.792c5.984-5.856 10.688-10.432 15.456-14.976 27.136-25.92 51.744-46.816 81.088-67.68 12.672-9.024 25.632-16.224 38.784-21.92A95.904 95.904 0 0 1 832 352c0 1.92-0.448 3.712-0.576 5.6 28.544 17.312 57.6 40.352 87.008 69.28a32 32 0 0 1 0.384 45.248zM960 629.792V736a96 96 0 0 1-96 96H160a96 96 0 0 1-96-96v-576a96 96 0 0 1 96-96h320v-64H256a32 32 0 0 1 0-64h512a32 32 0 0 1 0 64h-224v64h320a96 96 0 0 1 96 96v87.008a32 32 0 0 1-64 0V160a32 32 0 0 0-32-32H160a32 32 0 0 0-32 32V736a32 32 0 0 0 32 32h704a32 32 0 0 0 32-32v-106.208a32 32 0 0 1 64 0z" horiz-adv-x="1024" />
<glyph glyph-name="zuzhiqunzu" unicode="&#60376;" d="M960 192h-63.616v167.392a32 32 0 0 1-32 32H544V480h160a32 32 0 0 1 32 32V800a32 32 0 0 1-32 32H320a32 32 0 0 1-32-32v-288a32 32 0 0 1 32-32h160v-88.608H161.984a32 32 0 0 1-32-31.968L129.792 192H64a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H193.792l0.16 135.392H480V192h-64a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32h-64v135.392h288.384V192H768a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32zM352 768h320v-224H352V768zM224 0H96v128h128v-128z m352 0h-128v128h128v-128z m352 0h-128v128h128v-128z" horiz-adv-x="1024" />
<glyph glyph-name="weizhigeshi" unicode="&#60442;" d="M842.4 240.736C827.808 339.424 741.664 416 639.52 416a203.648 203.648 0 0 1-163.424-81.152 197.024 197.024 0 0 1-204.768-196.64c0-108.512 88.288-196.832 197.344-196.832h320.512c94.208 0 170.848 68.864 170.848 153.504-0.032 67.52-48.16 125.664-117.632 145.856z m-53.248-235.392H468.16a132.992 132.992 0 0 0-132.832 132.832 132.96 132.96 0 0 0 152 131.456l20.832-3.04 11.008 17.952A140.32 140.32 0 0 0 639.52 352c76.192 0 139.456-61.952 141.024-138.048l0.576-27.04 26.752-3.968C858.944 175.36 896 138.304 896 94.848c0-49.344-47.936-89.504-106.848-89.504zM253.856-32H195.04C175.712-32 160-15.424 160 4.928V763.072C160 783.424 175.712 800 195.04 800h633.888C848.288 800 864 783.424 864 763.072v-410.944a32 32 0 1 1 64 0V763.072C928 818.72 883.552 864 828.928 864H195.04C140.448 864 96 818.72 96 763.072v-758.144C96-50.72 140.448-96 195.04-96h58.784a32 32 0 0 1 0.032 64zM672 672a32 32 0 0 1-32 32H288a32 32 0 0 1 0-64h352a32 32 0 0 1 32 32zM288 544a32 32 0 0 1 0-64h192a32 32 0 0 1 0 64H288z" horiz-adv-x="1024" />
<glyph glyph-name="wumoxing" unicode="&#60467;" d="M848 112a79.936 79.936 0 0 1-73.248-48h-152.384A111.68 111.68 0 0 1 544 154.784V288h192c52.928 0 96 43.072 96 96s-43.072 96-96 96H288c-52.928 0-96-43.072-96-96s43.072-96 96-96h192v-133.216A111.616 111.616 0 0 1 401.632 64H249.248A79.936 79.936 0 0 1 96 32a80 80 0 0 1 153.248-32h161.984c18.048-37.696 56.256-64 100.768-64s82.72 26.304 100.768 64h161.984A79.936 79.936 0 0 1 928 32a80 80 0 0 1-80 80zM288 352a32.032 32.032 0 0 0 0 64h448a32.032 32.032 0 0 0 0-64H288z m224-352c-26.464 0-48 21.536-48 48S485.536 96 512 96s48-21.536 48-48S538.464 0 512 0zM272 160h91.488a32 32 0 1 1 0 64H272A176.192 176.192 0 0 0 96 400a175.04 175.04 0 0 0 148.48 173.888l19.04 2.976 6.24 18.24C305.248 698.528 402.592 768 512 768a256 256 0 0 0 242.208-172.896l6.272-18.24 19.04-2.976A175.04 175.04 0 0 0 928 400c0-97.024-78.976-176-176-176h-97.28a32 32 0 1 1 0-64h97.28c132.352 0 240 107.648 240 240a238.592 238.592 0 0 1-183.808 233.408 320.16 320.16 0 0 1-592.352 0A238.592 238.592 0 0 1 32 400C32 267.648 139.648 160 272 160z" horiz-adv-x="1024" />
<glyph glyph-name="zhihangfankui" unicode="&#60469;" d="M992.544 300.704a31.968 31.968 0 0 1-45.248 0l-201.376-201.376-95.04 95.04a31.968 31.968 0 1 1-45.248-45.248l117.664-117.664a31.968 31.968 0 0 1 45.248 0l224 224a31.968 31.968 0 0 1 0 45.248zM800 544a32 32 0 0 1-32 32H256a32 32 0 0 1 0-64h512a32 32 0 0 1 32 32zM256 352a32 32 0 0 1 0-64h288a32 32 0 0 1 0 64H256zM771.104-32H195.04C175.904-32 160-15.68 160 4.928V763.072C160 783.68 175.904 800 195.04 800h633.92C848.096 800 864 783.68 864 763.072v-350.528a32 32 0 0 1 64 0V763.072C928 818.624 883.84 864 828.96 864H195.04C140.16 864 96 818.624 96 763.072v-758.144C96-50.624 140.16-96 195.04-96h576.064a32 32 0 0 1 0 64z" horiz-adv-x="1024" />
<glyph glyph-name="gongdanqueren" unicode="&#60470;" d="M832 864H192C139.072 864 96 820.928 96 768v-768c0-52.928 43.072-96 96-96h640c52.928 0 96 43.072 96 96V768c0 52.928-43.072 96-96 96zM320 800h384v-96H320V800z m544-800a32 32 0 0 0-32-32H192c-17.632 0-32 14.336-32 32V768c0 17.632 14.368 32 32 32h64v-96c0-35.296 28.704-64 64-64h384c35.296 0 64 28.704 64 64V800h64c17.664 0 32-14.368 32-32v-768zM719.072 528.96l-249.376-249.376-120.256 120.288a31.968 31.968 0 1 1-45.248-45.248l142.88-142.912a32 32 0 0 1 45.248 0l272 272a31.968 31.968 0 1 1-45.248 45.248z" horiz-adv-x="1024" />
<glyph glyph-name="gongdan" unicode="&#60471;" d="M704 480H320a32 32 0 0 1 0-64h384a32 32 0 0 1 0 64zM704 288H320a32 32 0 0 1 0-64h384a32 32 0 0 1 0 64zM832 864H192C139.072 864 96 820.928 96 768v-768c0-52.928 43.072-96 96-96h640c52.928 0 96 43.072 96 96V768c0 52.928-43.072 96-96 96zM320 800h384v-96H320V800z m544-800a32 32 0 0 0-32-32H192c-17.632 0-32 14.336-32 32V768c0 17.632 14.368 32 32 32h64v-96c0-35.296 28.704-64 64-64h384c35.296 0 64 28.704 64 64V800h64c17.664 0 32-14.368 32-32v-768z" horiz-adv-x="1024" />
<glyph glyph-name="xiaoxi" unicode="&#60475;" d="M864 832H160C107.072 832 64 788.928 64 736v-608c0-52.928 43.072-96 96-96h61.92v-123.232L443.84 32H864c52.928 0 96 43.072 96 96V736c0 52.928-43.072 96-96 96z m32-704a32 32 0 0 0-32-32H443.84c-10.912 0-21.664-2.816-31.072-8.064l-126.88-70.4V32c0 35.296-28.704 64-64 64H160c-17.632 0-32 14.336-32 32V736c0 17.632 14.368 32 32 32h704c17.664 0 32-14.368 32-32v-608zM640 376H256a32 32 0 1 1 0-64h384a32 32 0 1 1 0 64zM768 600H256a32 32 0 0 1 0-64h512a32 32 0 1 1 0 64z" horiz-adv-x="1024" />
<glyph glyph-name="daibanshixiang" unicode="&#60494;" d="M336 352C256.608 352 192 287.392 192 208S256.608 64 336 64s144 64.608 144 144-64.608 144-144 144z m0-224C291.904 128 256 163.872 256 208S291.904 288 336 288s80-35.872 80-80-35.904-80-80-80zM800 640h-211.424a32 32 0 1 1 0-64H800a32 32 0 1 1 0 64zM800 320h-211.424a32 32 0 1 1 0-64H800a32 32 0 1 1 0 64zM800 512h-211.424a32 32 0 1 1 0-64H800a32 32 0 1 1 0 64zM800 184h-211.424a32 32 0 1 1 0-64H800a32 32 0 1 1 0 64zM440 660.192l-120.992-148.608-71.04 80.352a32 32 0 0 1-47.936-42.4l71.008-80.352a63.648 63.648 0 0 1 48.032-21.632 63.36 63.36 0 0 1 49.536 23.584L489.6 619.808a32 32 0 0 1-49.6 40.384zM896 832H128c-35.296 0-64-28.704-64-64v-768c0-35.296 28.704-64 64-64h768c35.296 0 64 28.704 64 64V768c0 35.296-28.704 64-64 64zM128 0V768h768l0.064-768H128z" horiz-adv-x="1024" />
<glyph glyph-name="liujisuan" unicode="&#60502;" d="M832 160a128 128 0 0 1-125.28-101.824l-318.304 0.064c-8.352 5.568-13.44 43.616-16.448 69.76h92.384c14.592-19.328 37.568-32 63.648-32a80 80 0 1 1-78.4 96h-86.24c-11.616 63.136-38.336 128-122.144 128H96a32 32 0 1 1 0-64h145.248c32.32 0 47.136-19.776 56.704-64H96a32 32 0 0 1 0-64h211.552c6.72-60.064 15.584-133.824 82.24-133.824h318.176c0.8 0 1.44 0.384 2.208 0.448C726.272-57.696000000000026 774.4-96 832-96a128 128 0 0 1 0 256z m0-192a64 64 0 1 0 0.032 128.032A64 64 0 0 0 832-32zM96 384h384.512c1.344 0 2.496 0.608 3.776 0.768A127.744 127.744 0 0 1 608 288a128 128 0 0 1 0 256 127.744 127.744 0 0 1-123.712-96.768c-1.28 0.16-2.432 0.768-3.776 0.768H96a32 32 0 0 1 0-64z m512 96a64 64 0 1 0-0.032-128.032A64 64 0 0 0 608 480zM96 506.208h145.248c108.224 0 121.6 90.272 129.6 144.192 6.688 45.504 10.784 53.6 18.944 53.6h298.56c14.592-19.328 37.568-32 63.648-32a80 80 0 1 1-78.4 96h-283.808C323.52 768 313.888 702.88 307.52 659.7760000000001c-9.408-63.648-18.048-89.568-66.272-89.568H96a32 32 0 0 1 0-64z" horiz-adv-x="1024" />
<glyph glyph-name="chucun" unicode="&#60510;" d="M512 832C357.472 832 96 805.056 96 704v-634.528c0-101.024 261.472-128 416-128 154.496 0 416 26.976 416 128V704c0 101.056-261.504 128-416 128zM160 438.272C247.328 396.928 405.184 384 512 384c106.88 0 264.864 12.96 352.16 54.368l0.096-148.256C852.352 266.27200000000005 725.056 224 512 224c-212.096 0-339.136 41.888-352 65.76v148.512zM512 448c-212.096 0-339.136 41.888-352 65.76v116.48C247.328 588.928 405.184 576 512 576c106.848 0 264.736 12.928 352.032 54.304l0.064-116.384C851.648 490.048 724.512 448 512 448z m0 320c206.88 0 332.96-39.872 351.008-64-18.048-24.128-144.128-64-351.008-64S179.04 679.8720000000001 161.024 704C179.04 728.1279999999999 305.12 768 512 768z m0-762.528c-213.568 0-341.056 42.496-352 64v144.8C247.328 172.928 405.184 160 512 160c106.944 0 265.056 12.992 352.32 54.432l0.096-142.688c-11.392-23.776-138.848-66.272-352.416-66.272z" horiz-adv-x="1024" />
<glyph glyph-name="get" unicode="&#60516;" d="M800 576c-88.224 0-160-71.776-160-160 0-17.504 3.52-34.08 8.768-49.888-75.84-27.168-153.6-21.152-237.024 19.04-76.928 37.056-126.688 81.472-148.544 132.256C332.416 535.04 384 597.376 384 672c0 88.224-71.776 160-160 160S64 760.224 64 672a160.288 160.288 0 0 1 128-156.768v-262.464A160.288 160.288 0 0 1 64 96c0-88.224 71.776-160 160-160s160 71.776 160 160a160.288 160.288 0 0 1-128 156.768v163.072c31.904-33.088 74.624-62.624 127.968-88.288 58.208-28.064 115.648-42.08 171.84-42.08 42.56 0 84.32 8.544 125.248 24.608C710.368 277.152 752.576 256 800 256c88.224 0 160 71.776 160 160s-71.776 160-160 160zM128 672c0 52.928 43.072 96 96 96s96-43.072 96-96-43.072-96-96-96-96 43.072-96 96z m192-576c0-52.928-43.072-96-96-96s-96 43.072-96 96 43.072 96 96 96 96-43.072 96-96z m480 224c-52.928 0-96 43.072-96 96s43.072 96 96 96 96-43.072 96-96-43.072-96-96-96z" horiz-adv-x="1024" />
<glyph glyph-name="zhexiantu" unicode="&#60518;" d="M896 64H128V672a32 32 0 0 1-64 0v-640a32 32 0 0 1 32-32h800a32 32 0 1 1 0 64zM247.008 256c7.424 0 14.88 2.56 20.96 7.808l179.744 155.84 174.56-155.52a31.968 31.968 0 0 1 44.704 2.08l250.432 269.216a32 32 0 1 1-46.88 43.616l-229.088-246.304-172.128 153.44a32.064 32.064 0 0 1-42.272 0.288l-200.992-174.24A32 32 0 0 1 247.008 256z" horiz-adv-x="1024" />
<glyph glyph-name="iframetianjia" unicode="&#60541;" d="M856.32 467.936a32 32 0 0 1-32-32v-163.328H372.48c-0.896 0-1.664-0.448-2.56-0.512v177.696h244.48a32 32 0 1 1 0 64H130.56c-0.896 0-1.664-0.448-2.56-0.512V664.32h488.16a32 32 0 1 1 0 64H96a32 32 0 0 1-32-32v-701.824a32 32 0 0 1 32-32h760.32a32 32 0 0 1 32 32V435.936a32 32 0 0 1-32 32zM128 450.272c0.896-0.064 1.664-0.512 2.56-0.512h175.36v-423.264H128V450.272z m241.92-423.776v182.624c0.896-0.064 1.664-0.512 2.56-0.512h451.84v-182.08h-454.4zM960 721.344h-61.376V782.72a32 32 0 1 1-64 0v-61.344H752.64a32 32 0 1 1 0-64h81.984v-81.984a32 32 0 1 1 64 0V657.344H960a32 32 0 1 1 0 64z" horiz-adv-x="1024" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 25 KiB

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