提交 d1a9ce1f 编写于 作者: D Devil

首页分类自定义配置,管理员登录优化

上级 9c35f1c4
......@@ -246,7 +246,7 @@ class Admin extends Common
public function LoginInfo()
{
// 是否已登录
if(session('admin') !== null)
if(AdminService::LoginInfo() !== null)
{
return redirect(MyUrl('admin/index/index'));
}
......@@ -312,7 +312,7 @@ class Admin extends Common
*/
public function Logout()
{
session('admin', null);
AdminService::LoginLogout();
return redirect(MyUrl('admin/admin/logininfo'));
}
}
......
......@@ -13,6 +13,7 @@ namespace app\admin\controller;
use think\facade\Hook;
use think\Controller;
use app\module\FormHandleModule;
use app\service\AdminService;
use app\service\AdminPowerService;
use app\service\ConfigService;
use app\service\ResourcesService;
......@@ -76,7 +77,7 @@ class Common extends Controller
$this->SystemInit();
// 管理员信息
$this->admin = session('admin');
$this->admin = AdminService::LoginInfo();
// 权限菜单
AdminPowerService::PowerMenuInit();
......@@ -184,7 +185,7 @@ class Common extends Controller
*/
protected function IsLogin()
{
if(session('admin') === null)
if($this->admin === null)
{
if(IS_AJAX)
{
......@@ -192,7 +193,9 @@ class Common extends Controller
} else {
die('<script type="text/javascript">if(self.frameElement && self.frameElement.tagName == "IFRAME"){parent.location.reload();}else{window.location.href="'.MyUrl('admin/admin/logininfo').'";}</script>');
}
}
} else {
AdminService::LoginRefresh($this->admin);
}
}
/**
......
......@@ -95,10 +95,20 @@ class Site extends Common
$category = GoodsService::GoodsCategoryList(['where'=>$where]);
if(!empty($category))
{
// 关键字
$floor_keywords = (empty($data['home_index_floor_top_right_keywords']) || empty($data['home_index_floor_top_right_keywords']['value'])) ? [] : json_decode($data['home_index_floor_top_right_keywords']['value'], true);
// 分类
$floor_category = (empty($data['home_index_floor_left_top_category']) || empty($data['home_index_floor_left_top_category']['value'])) ? [] : json_decode($data['home_index_floor_left_top_category']['value'], true);
foreach($category as &$c)
{
$c['config_keywords'] = isset($floor_keywords[$c['id']]) ? $floor_keywords[$c['id']] : '';
// 获取二级分类
$c['items'] = GoodsService::GoodsCategoryList(['where'=>['pid'=>$c['id'], 'is_enable'=>1]]);
// 配置的关键字
$c['config_keywords'] = array_key_exists($c['id'], $floor_keywords) ? $floor_keywords[$c['id']] : '';
// 配置左侧分类
$c['config_category_ids'] = array_key_exists($c['id'], $floor_category) ? explode(',', $floor_category[$c['id']]) : [];
}
}
$this->assign('goods_category_list', $category);
......@@ -257,14 +267,11 @@ class Site extends Common
// 参数
$params = $_POST;
// 导航
$nav_type = input('nav_type', 'base');
// 字段不存在赋空值
$field_list = [];
// 导航类型
switch($nav_type)
switch($this->nav_type)
{
// 用户注册
case 'register' :
......@@ -312,10 +319,18 @@ class Site extends Common
// 网站设置
case 'siteset' :
// 楼层关键字
$params['home_index_floor_top_right_keywords'] = empty($params['home_index_floor_top_right_keywords']) ? '' : json_encode($params['home_index_floor_top_right_keywords'], JSON_UNESCAPED_UNICODE);
// 楼层自定义商品
$params['home_index_floor_manual_mode_goods'] = empty($params['home_index_floor_manual_mode_goods']) ? '' : json_encode($params['home_index_floor_manual_mode_goods'], JSON_UNESCAPED_UNICODE);
switch($this->view_type)
{
// 首页
case 'index' :
// 楼层关键字
$params['home_index_floor_top_right_keywords'] = empty($params['home_index_floor_top_right_keywords']) ? '' : json_encode($params['home_index_floor_top_right_keywords'], JSON_UNESCAPED_UNICODE);
// 楼层自定义商品
$params['home_index_floor_manual_mode_goods'] = empty($params['home_index_floor_manual_mode_goods']) ? '' : json_encode($params['home_index_floor_manual_mode_goods'], JSON_UNESCAPED_UNICODE);
// 楼层左侧分类
$params['home_index_floor_left_top_category'] = empty($params['home_index_floor_left_top_category']) ? '' : json_encode($params['home_index_floor_left_top_category'], JSON_UNESCAPED_UNICODE);
break;
}
break;
// 缓存
......@@ -362,7 +377,7 @@ class Site extends Common
// 清除缓存
if($ret['code'] == 0)
{
switch($nav_type)
switch($this->nav_type)
{
// 登录
case 'login' :
......
......@@ -12,7 +12,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>$nav_type, 'view_type'=>$view_type])}}" enctype="multipart/form-data">
<!-- 快捷导航 -->
<div class="am-panel am-panel-default am-margin-top-sm">
<div class="am-panel-hd">
......@@ -28,6 +28,7 @@
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<input type="hidden" name="view_type" value="{{$view_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
......
......@@ -12,7 +12,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>$nav_type, 'view_type'=>$view_type])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.common_is_goods_detail_show_photo.name}}<span class="am-form-group-label-tips">{{$data.common_is_goods_detail_show_photo.describe}}</span></label>
<select name="{{$data.common_is_goods_detail_show_photo.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_goods_detail_show_photo.error_tips}}" required>
......@@ -39,6 +39,7 @@
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<input type="hidden" name="view_type" value="{{$view_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
......
......@@ -12,7 +12,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>$nav_type, 'view_type'=>$view_type])}}" enctype="multipart/form-data">
<!-- 基础 -->
<div class="am-panel am-panel-default am-margin-top-sm">
<div class="am-panel-hd">
......@@ -27,21 +27,35 @@
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_left_goods_category_max_count.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_left_goods_category_max_count.describe}}</span></label>
<div class="am-input-group am-input-group-sm">
<input type="number" min="0" name="{{$data.home_index_floor_left_goods_category_max_count.only_tag}}" placeholder="{{$data.home_index_floor_left_goods_category_max_count.name}}" data-validation-message="{{$data.home_index_floor_left_goods_category_max_count.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_index_floor_left_goods_category_max_count.value}}"{{/if}} />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="button"></button>
</span>
</div>
<div class="am-alert am-alert-warning" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>1. 配置每个楼层左侧最多展示多少个二级商品分类</p>
<p>2. 不建议将数量修改的太大、如高度超出楼层容器会比较拥挤</p>
<p>3. 商品分类显示层级配置不能小于2、否则二级分类不展示</p>
</div>
<label>{{$data.home_index_floor_left_top_category.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_left_top_category.describe}}</span></label>
{{if !empty($goods_category_list)}}
<ul class="am-list am-list-static am-list-border am-margin-bottom-0">
{{foreach $goods_category_list as $category}}
<li>
<p class="am-text-truncate am-margin-bottom-xs">
<span>{{$category.name}}</span>
<span class="am-margin-left-sm form.am-form am-form-group-label-tips">{{$category.vice_name}}</span>
</p>
<select name="{{$data.home_index_floor_left_top_category.only_tag}}[{{$category.id}}]" class="am-radius chosen-select" multiple="multiple" data-placeholder="请选择..." data-validation-message="{{$data.home_index_floor_left_top_category.error_tips}}">
{{if !empty($category['items'])}}
{{foreach $category.items as $v}}
<option value="{{$v.id}}" {{if !empty($category['config_category_ids']) and in_array($v['id'], $category['config_category_ids'])}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
{{/if}}
</select>
</li>
{{/foreach}}
</ul>
{{else /}}
<div class="am-text-center am-margin-top-lg">
<i class="am-icon-warning"></i>
<span>暂无数据,请先到 / 商品管理->商品分类、一级分类设置首页推荐</span>
</div>
{{/if}}
</div>
<div class="am-form-group">
<label>{{$data.home_index_floor_top_right_keywords.name}}<span class="am-form-group-label-tips">{{$data.home_index_floor_top_right_keywords.describe}}</span></label>
{{if !empty($goods_category_list)}}
......@@ -135,7 +149,7 @@
{{if !empty($floor_manual_mode_goods_list) && !empty($floor_manual_mode_goods_list[$category['id']])}}
{{foreach $floor_manual_mode_goods_list[$category['id']] as $g}}
<li class="manual-mode-goods-item-{{$g.id}}">
<input type="hidden" name="home_index_floor_manual_mode_goods[{{$category.id}}][]" value="{{$g.id}}" />
<input type="hidden" name="{{$data.home_index_floor_manual_mode_goods.only_tag}}[{{$category.id}}][]" value="{{$g.id}}" />
<a href="{{$g.goods_url}}" target="_blank" class="am-text-truncate">
<img src="{{$g.images}}" alt="{{$g.title}}" class="am-fl am-margin-right-xs" width="20" height="20" />
<span>{{$g.title}}</span>
......@@ -145,7 +159,7 @@
{{/foreach}}
{{/if}}
</ul>
<span class="business-operations-submit goods-popup-add" data-tag=".manual-mode-goods-container-{{$category.id}}" data-form-name="home_index_floor_manual_mode_goods[{{$category.id}}][]">+添加商品</span>
<span class="business-operations-submit goods-popup-add" data-tag=".manual-mode-goods-container-{{$category.id}}" data-form-name="{{$data.home_index_floor_manual_mode_goods.only_tag}}[{{$category.id}}][]">+添加商品</span>
</li>
{{/foreach}}
</ul>
......@@ -161,6 +175,7 @@
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<input type="hidden" name="view_type" value="{{$view_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
......
......@@ -12,7 +12,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>$nav_type, 'view_type'=>$view_type])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.home_is_enable_order_bulk_pay.name}}<span class="am-form-group-label-tips">{{$data.home_is_enable_order_bulk_pay.describe}}</span></label>
<select name="{{$data.home_is_enable_order_bulk_pay.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_is_enable_order_bulk_pay.error_tips}}" required>
......@@ -24,6 +24,7 @@
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<input type="hidden" name="view_type" value="{{$view_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
......
......@@ -12,7 +12,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>$nav_type, 'view_type'=>$view_type])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.home_search_keywords_type.name}}</label>
<select name="{{$data.home_search_keywords_type.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_search_keywords_type.error_tips}}">
......@@ -28,6 +28,7 @@
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<input type="hidden" name="view_type" value="{{$view_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
......
......@@ -205,7 +205,7 @@ function AdminIsPower($controller = null, $action = null, $unwanted_power = [])
$action = strtolower(empty($action) ? request()->action() : $action);
// 管理员
$admin = session('admin');
$admin = \app\service\AdminService::LoginInfo();
if(!empty($admin))
{
// 不需要校验权限的方法
......
......@@ -12,6 +12,7 @@ namespace app\service;
use think\Db;
use think\facade\Hook;
use app\service\AdminService;
/**
* 权限菜单服务层
......@@ -205,7 +206,7 @@ class AdminPowerService
public static function PowerMenuInit()
{
// 基础参数
$admin = session('admin');
$admin = AdminService::LoginInfo();
$admin_id = isset($admin['id']) ? intval($admin['id']) : 0;
$role_id = isset($admin['role_id']) ? intval($admin['role_id']) : 0;
......@@ -311,7 +312,7 @@ class AdminPowerService
*/
public static function MenuData()
{
$admin = session('admin');
$admin = AdminService::LoginInfo();
if(!empty($admin['id']))
{
$data = cache(config('cache_admin_left_menu_key').$admin['id']);
......@@ -339,7 +340,7 @@ class AdminPowerService
*/
public static function PowerData()
{
$admin = session('admin');
$admin = AdminService::LoginInfo();
if(!empty($admin['id']))
{
$data = cache(config('cache_admin_power_key').$admin['id']);
......
......@@ -21,6 +21,9 @@ use think\Db;
*/
class AdminService
{
// admin登录session key
public static $admin_login_key = 'admin_login';
/**
* 管理员列表
* @author Devil
......@@ -381,10 +384,10 @@ class AdminService
// 校验成功
// session存储
session('admin', $admin);
session(self::$admin_login_key, $admin);
// 返回数据,更新数据库
if(session('admin') != null)
if(session(self::$admin_login_key) != null)
{
$login_salt = GetNumberCode(6);
$data = array(
......@@ -404,8 +407,48 @@ class AdminService
}
// 失败
session('admin', null);
session(self::$admin_login_key, null);
return DataReturn('登录失败,请稍后再试!', -100);
}
/**
* 登录信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-11-26
* @desc description
*/
public static function LoginInfo()
{
return session(self::$admin_login_key);
}
/**
* 登录刷新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-11-26
* @desc description
* @param [array] $admin [管理员登录信息]
*/
public static function LoginRefresh($admin)
{
return session(self::$admin_login_key, $admin);
}
/**
* 登录退出
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-11-26
* @desc description
*/
public static function LoginLogout()
{
return session(self::$admin_login_key, null);
}
}
?>
\ No newline at end of file
......@@ -12,6 +12,7 @@ namespace app\service;
use think\Db;
use app\service\UserService;
use app\service\AdminService;
/**
* 问答/留言服务层
......@@ -180,7 +181,7 @@ class AnswerService
public static function AnswerSave($params = [])
{
// 是否开启登录留言,管理员登录状态可继续操作
if(MyC('common_is_login_answer') == 1 && session('admin') === null)
if(MyC('common_is_login_answer') == 1 && AdminService::LoginInfo() === null)
{
$user = UserService::LoginUserInfo();
if(empty($user))
......
......@@ -35,6 +35,7 @@ class ConfigService
'common_self_extraction_address',
'home_index_floor_top_right_keywords',
'home_index_floor_manual_mode_goods',
'home_index_floor_left_top_category',
];
// 附件字段列表
......
......@@ -12,6 +12,7 @@ namespace app\service;
use think\Db;
use app\service\UserService;
use app\service\AdminService;
/**
* 动态表格服务层
......@@ -145,7 +146,7 @@ class FormTableService
// 当前用户
if($module_name == 'admin')
{
$admin = session('admin');
$admin = AdminService::LoginInfo();
$user_id = empty($admin['id']) ? 0 : $admin['id'];
$user_type = 0;
} else {
......
......@@ -138,8 +138,11 @@ class GoodsService
$m = isset($params['m']) ? intval($params['m']) : 0;
$n = isset($params['n']) ? intval($params['n']) : 0;
// 排序
$order_by = empty($params['order_by']) ? 'sort asc' : trim($params['order_by']);
$field = 'id,pid,icon,name,vice_name,describe,bg_color,big_images,sort,is_home_recommended,seo_title,seo_keywords,seo_desc';
$data = Db::name('GoodsCategory')->field($field)->where($where)->order('sort asc')->limit($m, $n)->select();
$data = Db::name('GoodsCategory')->field($field)->where($where)->order($order_by)->limit($m, $n)->select();
return self::GoodsCategoryDataDealWith($data);
}
......@@ -196,18 +199,11 @@ class GoodsService
$data = self::GoodsCategoryList(['where'=>$where]);
if(!empty($data))
{
// 分类层级
$level = MyC('common_show_goods_category_level', 3, true);
if($level > 1)
// 楼层左侧商品分类从配置中读取
$floor_left_top_category = MyC('home_index_floor_left_top_category');
if(!empty($floor_left_top_category))
{
// 二级分类数量
$goods_category_count = MyC('home_index_floor_left_goods_category_max_count', 6, true);
foreach($data as &$c)
{
// 获取二级分类
$where['pid'] = $c['id'];
$c['items'] = self::GoodsCategoryList(['where'=>$where, 'n'=>$goods_category_count]);
}
$floor_left_top_category = json_decode($floor_left_top_category, true);
}
// 楼层关键字从配置中读取
......@@ -287,8 +283,16 @@ class GoodsService
// 商品数据、后面实时读取这里赋空值
$v['goods'] = [];
// 楼层左侧分类
if(!empty($floor_left_top_category) && !empty($floor_left_top_category[$v['id']]))
{
$v['items'] = self::GoodsCategoryList(['where'=>['id'=>explode(',', $floor_left_top_category[$v['id']])], 'm'=>0, 'n'=>0]);
} else {
$v['items'] = [];
}
// 楼层关键字
$v['config_keywords'] = empty($floor_keywords[$v['id']]) ? [] : explode(',', $floor_keywords[$v['id']]);
$v['config_keywords'] = (empty($floor_keywords) || empty($floor_keywords[$v['id']])) ? [] : explode(',', $floor_keywords[$v['id']]);
}
}
......@@ -303,7 +307,7 @@ class GoodsService
$goods_ids = [];
foreach($data as $cg)
{
if(!empty($cg['goods_ids']) & is_array($cg['goods_ids']))
if(!empty($cg['goods_ids']) && is_array($cg['goods_ids']))
{
$goods_ids = array_merge($goods_ids, $cg['goods_ids']);
}
......
......@@ -3,6 +3,7 @@
+=========================================================+
全局
1. 首页商品支持自定义配置
2. 首页左侧二级商品分类支持自定义配置
web端
1. 后台管理小程序列表新增主题管理
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册