485 lines
19 KiB
PHP
485 lines
19 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
* =========================================================
|
|
*/
|
|
namespace app\shop\controller;
|
|
use addon\weapp\model\Config as WeappConfigModel;
|
|
use app\Controller;
|
|
use app\model\store\Store as StoreModel;
|
|
use app\model\system\Config as SystemConfig;
|
|
use app\model\system\Group as GroupModel;
|
|
use app\model\system\Menu;
|
|
use app\model\system\Site;
|
|
use app\model\system\User as UserModel;
|
|
use app\model\upload\Config as UploadConfigModel;
|
|
use app\model\web\Config as ConfigModel;
|
|
use app\model\web\DiyView as DiyViewModel;
|
|
use app\model\web\WebSite as WebsiteModel;
|
|
use think\facade\Session;
|
|
use think\Validate;
|
|
|
|
class BaseShop extends Controller
|
|
{
|
|
protected $init_menu = [];
|
|
protected $crumbs = [];
|
|
protected $crumbs_array = [];
|
|
protected $uid;
|
|
protected $user_info;
|
|
protected $url;
|
|
protected $group_info;
|
|
protected $menus;
|
|
protected $menu_info;
|
|
protected $site_id = '';
|
|
protected $store_id;
|
|
protected $shop_info;
|
|
protected $store_info;
|
|
protected $app_module = SHOP_MODULE;
|
|
protected $replace = [];
|
|
protected $addon = '';
|
|
protected $userkey = '';
|
|
|
|
public function __construct()
|
|
{
|
|
//执行父类构造函数
|
|
parent::__construct();
|
|
$user_model = new UserModel();
|
|
$this->url = request()->parseUrl();
|
|
$this->addon = request()->addon() ? request()->addon() : '';
|
|
$this->checkLogin();
|
|
$this->agentLogin();
|
|
$this->user_info = $user_model->userInfo($this->app_module, $this->site_id);
|
|
//检测基础登录
|
|
$this->uid = $user_model->uid($this->app_module, $this->site_id);
|
|
if (empty($this->uid)) {
|
|
$this->redirect(url("shop/login/login"));
|
|
}
|
|
|
|
$this->site_id = request()->siteid($this->user_info['site_id']);
|
|
$this->app_module = $user_model->loginModule($this->site_id);
|
|
$this->assign("site_id", $this->site_id);
|
|
$this->assign("user_info", $this->user_info);
|
|
$this->assign('app_module', $this->app_module);
|
|
$this->assign("userkey", $this->userkey);
|
|
//检测用户组
|
|
$this->getGroupInfo();
|
|
if ($this->app_module == 'store') {
|
|
$this->replace = [
|
|
'STORE_CSS' => __ROOT__ . '/addon/store/store/view/public/css',
|
|
'STORE_JS' => __ROOT__ . '/addon/store/store/view/public/js',
|
|
'STORE_IMG' => __ROOT__ . '/addon/store/store/view/public/img',
|
|
];
|
|
//检测用户组,通过用户组查询对应门店id
|
|
$store_model = new StoreModel();
|
|
$store_info = $store_model->getStoreInfo([['store_id', '=', $this->store_id]]);
|
|
$this->store_info = $store_info['data'];
|
|
if ($this->store_info['is_frozen']) {
|
|
$this->error('该门店已关闭,请联系店铺管理员开启');
|
|
}
|
|
$this->assign('store_info', $this->store_info);
|
|
}
|
|
if (!$this->checkAuth()) {
|
|
if (!request()->isAjax()) {
|
|
$menu_info = $user_model->getRedirectUrl($this->url, $this->app_module, $this->group_info, $this->addon);
|
|
if (empty($menu_info)) {
|
|
$this->error('权限不足,请联系客服');
|
|
} else {
|
|
$this->redirect(addon_url($menu_info['url']));
|
|
}
|
|
} else {
|
|
echo json_encode(error(-1, '权限不足,请联系客服'));
|
|
exit;
|
|
}
|
|
}
|
|
//获取店铺信息
|
|
$site_model = new Site();
|
|
$shop_info = $site_model->getSiteInfo([['site_id', '=', $this->site_id]], 'site_id,site_name,logo,seo_keywords,seo_description, create_time');
|
|
$this->shop_info = $shop_info['data'];
|
|
$this->assign("shop_info", $shop_info['data']);
|
|
if (!request()->isAjax()) {
|
|
//获取菜单
|
|
$this->assign("help_show", HELP_SHOW);
|
|
$this->menus = $this->getMenuList();
|
|
$this->initBaseInfo();
|
|
}
|
|
// 加载自定义图标库
|
|
$diy_view = new DiyViewModel();
|
|
$diy_icon_url = $diy_view->getIconUrl()['data'];
|
|
$this->assign('load_diy_icon_url', $diy_icon_url);
|
|
// 上传图片配置
|
|
$uplode_config_model = new UploadConfigModel();
|
|
$upload_config = $uplode_config_model->getUploadConfig($this->site_id);
|
|
$this->assign('upload_max_filesize', $upload_config['data']['value']['upload']['max_filesize'] / 1024);
|
|
if ($this->app_module == 'store') {
|
|
$base = 'addon/store/store/view/base.html';
|
|
$this->assign('base', $base);
|
|
} else {
|
|
//$config_model = new ConfigModel();
|
|
//$base = $config_model->getStyle($this->site_id);
|
|
$base = 'app/shop/view/base/style2.html';
|
|
$this->assign('base', $base);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载基础信息
|
|
*/
|
|
private function initBaseInfo()
|
|
{
|
|
//获取一级权限菜单
|
|
$this->getTopMenu();
|
|
$menu_model = new Menu();
|
|
$info_result = $menu_model->getMenuInfoByUrl($this->url, $this->app_module, $this->addon);
|
|
$info = [];
|
|
if (!empty($info_result["data"])) {
|
|
$info = $info_result["data"];
|
|
$this->getParentMenuList($info['name']);
|
|
} elseif ($this->url == '/Index/index') {
|
|
$info_result = $menu_model->getMenuInfoByUrl($this->url, $this->app_module, $this->addon);
|
|
if (!empty($info_result["data"])) {
|
|
$info = $info_result["data"];
|
|
$this->getParentMenuList($info['name']);
|
|
}
|
|
}
|
|
$this->menu_info = $info;
|
|
$this->assign("menu_info", $info);
|
|
if (!empty($this->crumbs)) {
|
|
$this->crumbs = array_reverse($this->crumbs);
|
|
$this->assign("crumbs", $this->crumbs);
|
|
}
|
|
|
|
//加载菜单树
|
|
$init_menu = $this->initMenu($this->menus, '');
|
|
$init_menu = $this->getRealMenu($init_menu);
|
|
|
|
$this->assign("url", $this->url);
|
|
$this->assign("menu", $init_menu);
|
|
|
|
//加载版权信息
|
|
$config_model = new ConfigModel();
|
|
$copyright = $config_model->getCopyright();
|
|
$this->assign('copyright', $copyright['data']['value']);
|
|
|
|
// 查询小程序配置信息
|
|
$weapp_config_model = new WeappConfigModel();
|
|
$weapp_config = $weapp_config_model->getWeappConfig($this->site_id);
|
|
$weapp_config = $weapp_config['data']['value'];
|
|
$this->assign('base_weapp_config', $weapp_config);
|
|
}
|
|
|
|
/**
|
|
* 加载构造函数信息
|
|
*/
|
|
public function initConstructInfo()
|
|
{
|
|
$this->site_id = input('site_id', 1);
|
|
$config_model = new ConfigModel();
|
|
$base = $config_model->getStyle($this->site_id);
|
|
$this->assign('base', $base);
|
|
$site_model = new Site();
|
|
$shop_info = $site_model->getSiteInfo([['site_id', '=', $this->site_id]], 'site_name,logo,seo_keywords,seo_description, create_time')['data'];
|
|
$this->assign("shop_info", $shop_info);
|
|
$this->assign('app_module', $this->app_module);
|
|
// 加载自定义图标库
|
|
$diy_view = new DiyViewModel();
|
|
$diy_icon_url = $diy_view->getIconUrl()['data'];
|
|
$this->assign('load_diy_icon_url', $diy_icon_url);
|
|
}
|
|
|
|
/**
|
|
* layui化处理菜单数据
|
|
* @param $menus_list
|
|
* @param string $parent
|
|
* @return array
|
|
*/
|
|
public function initMenu($menus_list, $parent = "")
|
|
{
|
|
$temp_list = [];
|
|
if (!empty($menus_list)) {
|
|
foreach ($menus_list as $menu_k => $menu_v) {
|
|
if (in_array($menu_v['name'], $this->crumbs_array)) {
|
|
$selected = true;
|
|
} else {
|
|
$selected = false;
|
|
}
|
|
if ($menu_v["parent"] == $parent && $menu_v["is_show"] == 1) {
|
|
$temp_item = array(
|
|
'name' => $menu_v['name'],
|
|
'level' => $menu_v['level'],
|
|
'addon' => $menu_v['addon'],
|
|
'selected' => $selected,
|
|
'url' => addon_url($menu_v['url']),
|
|
'title' => $menu_v['title'],
|
|
'icon' => $menu_v['picture'],
|
|
'icon_selected' => $menu_v['picture_select'],
|
|
'target' => '',
|
|
'parent' => $menu_v['parent']
|
|
);
|
|
$child = $this->initMenu($menus_list, $menu_v["name"]);//获取下级的菜单
|
|
$temp_item["child_list"] = $child;
|
|
$temp_list[$menu_v["name"]] = $temp_item;
|
|
}
|
|
}
|
|
}
|
|
return $temp_list;
|
|
}
|
|
|
|
/**
|
|
* 获取上级菜单列表
|
|
* @param string $name
|
|
*/
|
|
private function getParentMenuList($name = '')
|
|
{
|
|
if (!empty($name)) {
|
|
$menu_model = new Menu();
|
|
$menu_info_result = $menu_model->getMenuInfo([['name', "=", $name], ['app_module', '=', $this->app_module]]);
|
|
$menu_info = $menu_info_result["data"];
|
|
if (!empty($menu_info)) {
|
|
$menu_info["url"] = addon_url($menu_info["url"]);
|
|
$this->crumbs[] = $menu_info;
|
|
$this->crumbs_array[] = $menu_info['name'];
|
|
$this->getParentMenuList($menu_info['parent']);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 获取当前用户的用户组
|
|
*/
|
|
private function getGroupInfo()
|
|
{
|
|
$group_model = new GroupModel();
|
|
$group_info_result = $group_model->getGroupInfo([["group_id", "=", $this->user_info["group_id"]], ["app_module", "=", $this->app_module]]);
|
|
$this->group_info = $group_info_result["data"];
|
|
if ($this->app_module == 'store') {
|
|
//门店登录,用户权限对应站点id是门店id
|
|
$this->store_id = $this->group_info['site_id'];
|
|
}
|
|
}
|
|
|
|
|
|
/***
|
|
* 代理代管登录
|
|
*/
|
|
private function agentLogin()
|
|
{
|
|
$manage = explode('_', input('unisid', ''));
|
|
$is_manage = $manage[0];
|
|
$unisid = $manage[1] ?? '';
|
|
$this->userkey = Session::get($this->app_module . '.userkey');
|
|
if ($unisid && is_numeric($unisid) && $is_manage == 'manage') {
|
|
if (!$this->userkey || $this->userkey != $unisid) {
|
|
$website_model = new WebsiteModel();
|
|
$user_model = new UserModel();
|
|
$userInfo = $user_model->userInfo($this->app_module);
|
|
$agentInfo = $website_model->getWebSite(['site_id' => $userInfo['site_id'], 'is_agent' => 1])['data'];
|
|
if ($agentInfo) {
|
|
//检测基础登录
|
|
$login = $user_model->AgentLogin($unisid, $this->app_module);
|
|
if ($login) {
|
|
$this->uid = $login['uid'];
|
|
$this->site_id = $unisid;
|
|
$this->userkey = Session::get($this->app_module . '.userkey');
|
|
request()->siteid($unisid);
|
|
}
|
|
}
|
|
} else if ($this->userkey) {
|
|
$this->site_id = $this->userkey;
|
|
request()->siteid($this->site_id);
|
|
}
|
|
} else if ($is_manage && $is_manage == 'cancel') {
|
|
$this->userkey = '';
|
|
Session::set($this->app_module . '.userkey', null);
|
|
} else if ($this->userkey) {
|
|
$this->site_id = $this->userkey;
|
|
request()->siteid($this->site_id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 验证登录
|
|
*/
|
|
private function checkLogin()
|
|
{
|
|
//验证基础登录
|
|
if (!Session::get($this->app_module . '_user_info')) {
|
|
$this->redirect(url('shop/login/login'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 检测权限
|
|
*/
|
|
private function checkAuth()
|
|
{
|
|
if ($this->user_info['is_admin'] == 1) {
|
|
return true;
|
|
}
|
|
$user_model = new UserModel();
|
|
$res = $user_model->checkAuth($this->url, $this->app_module, $this->group_info, $this->addon);
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 获取菜单
|
|
*/
|
|
private function getMenuList()
|
|
{
|
|
$menu_model = new Menu();
|
|
//暂定全部权限,系统用户做完后放开
|
|
if ($this->user_info['is_admin'] || $this->group_info['is_system'] == 1) {
|
|
$where[]=['app_module', "=", $this->app_module];
|
|
if($this->uid!=1){
|
|
$where[]=['addon', "<>", 'saasagent'];
|
|
}
|
|
$menus = $menu_model->getMenuList($where, '*', 'level asc, sort asc');
|
|
} else {
|
|
$menus = $menu_model->getMenuList([['name', 'in', $this->group_info['menu_array']], ['app_module', "=", $this->app_module]], '*', 'level asc,sort asc');
|
|
$control_menu = $menu_model->getMenuList([['is_control', '=', 0], ['app_module', "=", $this->app_module]], '*', 'sort asc');
|
|
$menus['data'] = array_merge($control_menu['data'], $menus['data']);
|
|
$keys = array_column($menus['data'], 'sort');
|
|
if (!empty($keys)) {
|
|
array_multisort($keys, SORT_ASC, SORT_NUMERIC, $menus['data']);
|
|
}
|
|
}
|
|
return $menus['data'];
|
|
}
|
|
|
|
/**
|
|
* 获取顶级菜单
|
|
*/
|
|
protected function getTopMenu()
|
|
{
|
|
$list = array_filter($this->menus, function ($v) {
|
|
return $v['parent'] == '0';
|
|
});
|
|
return $list;
|
|
}
|
|
|
|
/**
|
|
* 四级菜单
|
|
* @param array $params
|
|
*/
|
|
protected function forthMenu($params = [])
|
|
{
|
|
if (!empty($this->crumbs)) {
|
|
//菜单的等级有可能是四级,也可能是五级,级数不能写死,直接取最后一个就行
|
|
$crumbs = $this->crumbs;
|
|
$menu_info = array_pop($crumbs);
|
|
$menu_model = new Menu();
|
|
$menus = $menu_model->getMenuList([['app_module', "=", $this->app_module], ['is_show', "=", 1], ['parent', '=', $menu_info['parent']]], '*', 'sort asc');
|
|
foreach ($menus['data'] as $k => $v) {
|
|
$menus['data'][$k]['parse_url'] = addon_url($menus['data'][$k]['url'], $params);
|
|
if ($menus['data'][$k]['name'] == $menu_info['name']) {
|
|
$menus['data'][$k]['selected'] = 1;
|
|
} else {
|
|
$menus['data'][$k]['selected'] = 0;
|
|
}
|
|
}
|
|
$this->assign('forth_menu', $menus['data']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 添加日志
|
|
* @param $action_name
|
|
* @param array $data
|
|
*/
|
|
protected function addLog($action_name, $data = [])
|
|
{
|
|
$user = new UserModel();
|
|
$user->addUserLog($this->uid, $this->user_info['username'], $this->site_id, $action_name, $data);
|
|
}
|
|
|
|
/**
|
|
* 切换风格
|
|
* @return array
|
|
*/
|
|
public function checkStyle()
|
|
{
|
|
$style = array(
|
|
'app/shop/view/base/style1.html',
|
|
'app/shop/view/base/style2.html'
|
|
);
|
|
$type = input('type', 'old');
|
|
$data = [];
|
|
if ($type == 'old') {
|
|
$data['style'] = $style[0];
|
|
} else if ($type == 'new') {
|
|
$data['style'] = $style[1];
|
|
}
|
|
$config_model = new ConfigModel();
|
|
$res = $config_model->setStyle($data, $this->site_id);
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 获取真实的链接
|
|
* @param $menu_list
|
|
* @return mixed
|
|
*/
|
|
protected function getRealMenu($menu_list)
|
|
{
|
|
if (empty($this->crumbs)) {
|
|
return $menu_list;
|
|
}
|
|
if ($this->crumbs[0]['name'] != 'PROMOTION_ROOT') return $menu_list;
|
|
|
|
$config = new SystemConfig();
|
|
$value = $config->getConfig([['site_id', '=', $this->site_id], ['app_module', '=', $this->app_module], ['config_key', '=', 'COMMON_ADDON']])['data']['value'];
|
|
$promotion_addon = empty($value) ? [] : explode(',', $value['promotion'] ?? '');
|
|
$tool_addon = empty($value) ? [] : explode(',', $value['tool'] ?? '');
|
|
|
|
if (isset($this->crumbs[0])) {
|
|
// 处理父级菜单不在营销下的插件
|
|
$all_promotion = array_filter(array_column($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_CENTER']['child_list'], 'addon'));
|
|
$promotion_diff = array_filter(array_diff($promotion_addon, $all_promotion));
|
|
|
|
if (!empty($promotion_diff)) {
|
|
foreach ($promotion_diff as $addon) {
|
|
$addon_menu = require 'addon/' . $addon . '/config/menu_' . $this->app_module . '.php';
|
|
$addon_info = require 'addon/' . $addon . '/config/info.php';
|
|
if (isset($addon_menu[0])) {
|
|
array_push($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_CENTER']['child_list'],
|
|
array_merge($addon_menu[0], ['title' => $addon_info['title'], 'selected' => false, 'url' => addon_url($addon_menu[0]['url'])]));
|
|
}
|
|
}
|
|
}
|
|
$all_tool = array_filter(array_column($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_TOOL']['child_list'], 'addon'));
|
|
$tool_diff = array_filter(array_diff($tool_addon, $all_tool));
|
|
if (!empty($tool_diff)) {
|
|
foreach ($tool_diff as $addon) {
|
|
$addon_menu = require 'addon/' . $addon . '/config/menu_' . $this->app_module . '.php';
|
|
$addon_info = require 'addon/' . $addon . '/config/info.php';
|
|
if (isset($addon_menu[0])) {
|
|
array_push($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_TOOL']['child_list'],
|
|
array_merge($addon_menu[0], ['title' => $addon_info['title'], 'selected' => false, 'url' => addon_url($addon_menu[0]['url'])]));
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_CENTER']['child_list'] as $k => &$val) {
|
|
if (!empty($val['addon']) && ($val['addon'] != $this->addon && !in_array($val['addon'], $promotion_addon))) {
|
|
unset($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_CENTER']['child_list'][$k]);
|
|
}
|
|
}
|
|
foreach ($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_TOOL']['child_list'] as $k => &$val) {
|
|
if (!empty($val['addon']) && ($val['addon'] != $this->addon && !in_array($val['addon'], $tool_addon))) {
|
|
unset($menu_list['PROMOTION_ROOT']['child_list']['PROMOTION_TOOL']['child_list'][$k]);
|
|
}
|
|
}
|
|
|
|
}
|
|
return $menu_list;
|
|
}
|
|
|
|
public function __call($method, $args)
|
|
{
|
|
return $this->fetch('error/error');
|
|
}
|
|
} |