提交 3be30994 编写于 作者: D devil

角色列表优化

上级 d8eb911d
......@@ -255,21 +255,21 @@ class Common extends Controller
public function FormTableInit()
{
// 获取表格模型
$module = FormModulePath($this->data_request);
if(!empty($module))
$data = FormModulePath($this->data_request);
if(!empty($data))
{
// 调用表格处理
$res = (new FormHandleModule())->Run($module, $this->data_request);
if($res['code'] == 0)
$ret = (new FormHandleModule())->Run($data['module'], $data['action'], $this->data_request);
if($ret['code'] == 0)
{
$this->form_table = $res['data']['table'];
$this->form_where = $res['data']['where'];
$this->form_params = $res['data']['params'];
$this->form_table = $ret['data']['table'];
$this->form_where = $ret['data']['where'];
$this->form_params = $ret['data']['params'];
$this->assign('form_table', $this->form_table);
$this->assign('form_params', $this->form_params);
} else {
$this->form_error = $res['msg'];
$this->form_error = $ret['msg'];
$this->assign('form_error', $this->form_error);
}
}
......
......@@ -129,7 +129,10 @@ class Goods extends Common
if(!empty($params['id']))
{
// 条件
$where = GoodsService::GetAdminIndexWhere($params);
$where = [
['is_delete_time', '=', 0],
['id', '=', intval($params['id'])],
];
// 获取数据
$data_params = [
......
......@@ -10,11 +10,10 @@
// +----------------------------------------------------------------------
namespace app\admin\controller;
use think\facade\Hook;
use app\service\AdminPowerService;
/**
* 权限管理
* 权限菜单管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
......@@ -63,13 +62,13 @@ class Power extends Common
}
/**
* [PowerSave 权限添加/编辑]
* [Save 权限添加/编辑]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-13T21:41:03+0800
*/
public function PowerSave()
public function Save()
{
// 是否ajax
if(!IS_AJAX)
......@@ -78,19 +77,19 @@ class Power extends Common
}
// 开始操作
$params = input('post.');
$params = $this->data_post;
$params['admin'] = $this->admin;
return AdminPowerService::PowerSave($params);
}
/**
* [PowerDelete 权限删除]
* [Delete 权限删除]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:40:29+0800
*/
public function PowerDelete()
public function Delete()
{
// 是否ajax
if(!IS_AJAX)
......@@ -99,137 +98,9 @@ class Power extends Common
}
// 开始操作
$params = input('post.');
$params = $this->data_post;
$params['admin'] = $this->admin;
return AdminPowerService::PowerDelete($params);
}
/**
* [Role 角色组列表]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function Role()
{
$data_params = [
'field' => 'id,name,is_enable,add_time',
];
$data = AdminPowerService::RoleList($data_params);
$this->assign('data_list', $data);
return $this->fetch();
}
/**
* [RoleSaveInfo 角色组添加/编辑页面]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function RoleSaveInfo()
{
// 参数
$params = input();
// 角色组
$data = [];
if(!empty($params['id']))
{
$data_params = [
'where' => ['id'=>intval($params['id'])],
];
$ret = AdminPowerService::RoleList($data_params);
if(!empty($ret[0]['id']))
{
$data = $ret[0];
// 权限关联数据
$params['role_id'] = $ret[0]['id'];
}
}
// 菜单列表
$power = AdminPowerService::RolePowerEditData($params);
$this->assign('common_is_enable_list', lang('common_is_enable_list'));
$this->assign('power', $power);
// 角色编辑页面钩子
$hook_name = 'plugins_view_admin_power_role_save';
$this->assign($hook_name.'_data', Hook::listen($hook_name,
[
'hook_name' => $hook_name,
'is_backend' => true,
'role_id' => isset($params['id']) ? $params['id'] : 0,
'data' => &$data,
'params' => &$params,
]));
// 数据
$this->assign('data', $data);
$this->assign('params', $params);
return $this->fetch();
}
/**
* [RoleSave 角色组添加/编辑]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function RoleSave()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error('非法访问');
}
// 开始操作
return AdminPowerService::RoleSave(input('post.'));
}
/**
* [RoleDelete 角色删除]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-15T11:03:30+0800
*/
public function RoleDelete()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error('非法访问');
}
// 开始操作
return AdminPowerService::RoleDelete(input('post.'));
}
/**
* [RoleStatusUpdate 角色状态更新]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-12T22:23:06+0800
*/
public function RoleStatusUpdate()
{
// 是否ajax
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始操作
$params = input('post.');
$params['admin'] = $this->admin;
return AdminPowerService::RoleStatusUpdate($params);
}
}
?>
\ No newline at end of file
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use think\facade\Hook;
use app\service\AdminRoleService;
/**
* 角色管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Role extends Common
{
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function __construct()
{
// 调用父类前置方法
parent::__construct();
// 登录校验
$this->IsLogin();
// 权限校验
$this->IsPower();
}
/**
* [Index 角色组列表]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function Index()
{
// 总数
$total = AdminRoleService::RoleTotal($this->form_where);
// 分页
$page_params = [
'number' => $this->page_size,
'total' => $total,
'where' => $this->data_request,
'page' => $this->page,
'url' => MyUrl('admin/role/index'),
];
$page = new \base\Page($page_params);
// 获取数据列表
$data_params = [
'where' => $this->form_where,
'm' => $page->GetPageStarNumber(),
'n' => $this->page_size,
];
$ret = AdminRoleService::RoleList($data_params);
// 基础参数赋值
$this->assign('params', $this->data_request);
$this->assign('page_html', $page->GetPageHtml());
$this->assign('data_list', $ret['data']);
return $this->fetch();
}
/**
* 详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-08-05T08:21:54+0800
*/
public function Detail()
{
if(!empty($this->data_request['id']))
{
// 条件
$where = [
['id', '=', intval($this->data_request['id'])],
];
// 获取列表
$data_params = [
'm' => 0,
'n' => 1,
'where' => $where,
];
$ret = AdminRoleService::RoleList($data_params);
$data = (empty($ret['data']) || empty($ret['data'][0])) ? [] : $ret['data'][0];
$this->assign('data', $data);
}
return $this->fetch();
}
/**
* [SaveInfo 角色组添加/编辑页面]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function SaveInfo()
{
// 参数
$params = $this->data_request;
// 角色组
$data = [];
if(!empty($params['id']))
{
$data_params = [
'where' => ['id'=>intval($params['id'])],
];
$ret = AdminRoleService::RoleList($data_params);
if(!empty($ret['data'][0]) && !empty($ret['data'][0]['id']))
{
$data = $ret['data'][0];
// 权限关联数据
$params['role_id'] = $ret['data'][0]['id'];
}
}
// 菜单列表
$power = AdminRoleService::RolePowerEditData($params);
$this->assign('power', $power);
// 角色编辑页面钩子
$hook_name = 'plugins_view_admin_role_save';
$this->assign($hook_name.'_data', Hook::listen($hook_name,
[
'hook_name' => $hook_name,
'is_backend' => true,
'role_id' => isset($params['id']) ? $params['id'] : 0,
'data' => &$data,
'params' => &$params,
]));
// 数据
$this->assign('data', $data);
$this->assign('params', $params);
return $this->fetch();
}
/**
* [Save 角色组添加/编辑]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-14T21:37:02+0800
*/
public function Save()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error('非法访问');
}
// 开始操作
return AdminRoleService::RoleSave($this->data_post);
}
/**
* [Delete 角色删除]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-15T11:03:30+0800
*/
public function Delete()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error('非法访问');
}
// 开始操作
return AdminRoleService::RoleDelete($this->data_post);
}
/**
* [StatusUpdate 角色状态更新]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-12T22:23:06+0800
*/
public function StatusUpdate()
{
// 是否ajax
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始操作
$params = $this->data_post;
$params['admin'] = $this->admin;
return AdminRoleService::RoleStatusUpdate($params);
}
}
?>
\ No newline at end of file
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\form;
use app\service\AdminService;
/**
* 角色管理动态表格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-11
* @desc description
*/
class Role
{
// 基础条件
public $condition_base = [];
/**
* 入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-11
* @desc description
* @param [array] $params [输入参数]
*/
public function Run($params = [])
{
return [
// 基础配置
'base' => [
'key_field' => 'id',
'status_field' => 'is_enable',
'is_search' => 1,
'search_url' => MyUrl('admin/role/index'),
'is_delete' => 1,
'delete_url' => MyUrl('admin/role/delete'),
'delete_key' => 'ids',
'detail_title' => '基础信息',
],
// 表单配置
'form' => [
[
'view_type' => 'checkbox',
'is_checked' => 0,
'checked_text' => '反选',
'not_checked_text' => '全选',
'align' => 'center',
'not_show_data' => [1],
'not_show_key' => 'id',
'width' => 80,
],
[
'label' => '角色名称',
'view_type' => 'field',
'view_key' => 'name',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => '状态',
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/role/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => lang('common_is_text_list'),
'data_key' => 'id',
'data_name' => 'name',
'is_multiple' => 1,
],
],
[
'label' => '创建时间',
'view_type' => 'field',
'view_key' => 'add_time',
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => '更新时间',
'view_type' => 'field',
'view_key' => 'upd_time',
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => '操作',
'view_type' => 'operate',
'view_key' => 'role/module/operate',
'align' => 'center',
'fixed' => 'right',
],
],
];
}
}
?>
\ No newline at end of file
......@@ -18,7 +18,7 @@
</div>
<div class="am-popup-bd">
<!-- form start -->
<form class="am-form form-validation admin-save" action="{{:MyUrl('admin/power/powersave')}}" method="POST" request-type="ajax-reload" request-value="">
<form class="am-form form-validation admin-save" action="{{:MyUrl('admin/power/save')}}" method="POST" request-type="ajax-reload" request-value="">
<div class="am-form-group">
<label>栏目级别</label>
<select class="am-radius chosen-select" name="pid" data-validation-message="栏目级别选择错误">
......@@ -75,7 +75,7 @@
<div class="am-fr m-r-20 list-submit">
<span class="am-icon-edit am-icon-md c-p submit-edit {{if !empty($v['item'])}}am-margin-right-xs{{/if}}" data-am-modal="{target: '#power-save-win'}" data-json='{{:json_encode($v)}}' data-tag="power-save-win" data-item="{{if !empty($v['item'])}}ok{{else /}}no{{/if}}"></span>
{{if empty($v['item'])}}
<span class="am-icon-trash-o am-icon-md c-p m-l-20 m-r-15 submit-delete" data-url="{{:MyUrl('admin/power/powerdelete')}}" data-id="{{$v.id}}"></span>
<span class="am-icon-trash-o am-icon-md c-p m-l-20 m-r-15 submit-delete" data-url="{{:MyUrl('admin/power/delete')}}" data-id="{{$v.id}}"></span>
{{/if}}
</div>
</li>
......@@ -88,7 +88,7 @@
</label>
<div class="am-fr am-margin-left-sm find-submit">
<span class="am-icon-edit am-icon-sm c-p submit-edit" data-am-modal="{target: '#power-save-win'}" data-json='{{:json_encode($vs)}}' data-tag="power-save-win" data-item="no"></span>
<span class="am-icon-trash-o am-icon-sm c-p am-margin-left-sm am-margin-right-sm submit-delete" data-url="{{:MyUrl('admin/power/powerdelete')}}" data-id="{{$vs.id}}"></span>
<span class="am-icon-trash-o am-icon-sm c-p am-margin-left-sm am-margin-right-sm submit-delete" data-url="{{:MyUrl('admin/power/delete')}}" data-id="{{$vs.id}}"></span>
</div>
</li>
{{/foreach}}
......
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- operation start -->
<div class="am-g">
<a href="{{:MyUrl('admin/power/rolesaveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
</div>
<!-- operation end -->
<!-- list start -->
<div class="am-scrollable-horizontal am-table-scrollable-horizontal am-margin-top-sm">
<table class="am-table am-table-striped am-table-hover am-table-bordered am-text-nowrap am-table-td-fixed-last">
<thead>
<tr>
<th>名称</th>
<th class="am-text-center">状态</th>
<th>创建时间</th>
<th class="am-text-center" data-width="170">操作</th>
</tr>
</thead>
<tbody>
{{if !empty($data_list)}}
{{foreach $data_list as $v}}
<tr id="data-list-{{$v.id}}" {{if $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td class="am-text-middle">{{$v.name}}</td>
<td class="am-text-middle am-text-center">
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:MyUrl('admin/power/RoleStatusUpdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
</td>
<td class="am-text-middle">{{:date('Y-m-d H:i:s', $v['add_time'])}}</td>
<td class="am-operate-grid" data-width="170">
<div class="am-scrollable-vertical">
{{if $v['id'] eq 1}}
<span class="cr-ccc">不可操作</span>
{{else /}}
<a class="am-btn am-btn-secondary am-btn-xs am-radius" href="{{:MyUrl('admin/power/rolesaveinfo', array('id'=>$v['id']))}}">
<i class="am-icon-edit"></i>
<span>编辑</span>
</a>
<button class="am-btn am-btn-danger am-btn-xs am-radius submit-delete" data-url="{{:MyUrl('admin/power/roledelete')}}" data-id="{{$v.id}}">
<i class="am-icon-trash-o"></i>
<span>删除</span>
</button>
{{/if}}
</div>
</td>
</tr>
{{/foreach}}
{{/if}}
</tbody>
</table>
{{if empty($data_list)}}
<div class="table-no"><i class="am-icon-warning"></i> 没有相关数据</div>
{{/if}}
</div>
<!-- list end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
\ No newline at end of file
<!-- 继承公共的 form -->
{{extend name="public/module/detail" /}}
<!-- 重写数据模块 -->
{{block name="detail_data"}}
<!-- 父级内容 -->
{__block__}
<!-- 权限项 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">权限项</div>
<div class="am-panel-bd">
<ul class="am-avg-sm-2 am-avg-md-4 am-avg-lg-6">
{{foreach $data.items as $item}}
<li class="am-padding-vertical-sm">{{$item}}</li>
{{/foreach}}
</ul>
</div>
</div>
{{/block}}
\ No newline at end of file
<!-- 继承公共的 form -->
{{extend name="public/module/form" /}}
<!-- 表单顶部操作栏 -->
{{block name="form_operate_top"}}
<a href="{{:MyUrl('admin/role/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<!-- 父级内容 -->
{__block__}
{{/block}}
\ No newline at end of file
<!-- 操作栏 -->
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/role/detail', ['id'=>$module_data['id']])}}">
<i class="am-icon-eye"></i>
<span>详情</span>
</button>
{{if $module_data['id'] neq 1}}
<a class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/role/saveinfo', array('id'=>$module_data['id']))}}">
<i class="am-icon-edit"></i>
<span>编辑</span>
</a>
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block submit-delete" data-url="{{:MyUrl('admin/role/delete')}}" data-id="{{$module_data.id}}" data-key="ids">
<i class="am-icon-trash-o"></i>
<span>删除</span>
</button>
{{/if}}
\ No newline at end of file
......@@ -4,7 +4,7 @@
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/power/rolesave')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/power/role')}}">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/role/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/role/index')}}">
<legend>
<span class="am-text-default">
{{if empty($data['id'])}}
......@@ -13,7 +13,7 @@
角色编辑
{{/if}}
</span>
<a href="{{:MyUrl('admin/power/role')}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
<a href="{{:MyUrl('admin/role/index')}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
</legend>
<div class="am-form-group">
<label>角色名称</label>
......@@ -59,14 +59,14 @@
<!-- 插件扩展数据 start -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_view_admin_power_role_save</span>
<span>plugins_view_admin_role_save</span>
</div>
{{/if}}
{{if !empty($plugins_view_admin_power_role_save_data) and is_array($plugins_view_admin_power_role_save_data)}}
{{if !empty($plugins_view_admin_role_save_data) and is_array($plugins_view_admin_role_save_data)}}
<div class="am-alert am-alert-secondary">
<label class="am-text-sm am-text-warning">该区域为插件扩展数据,请按照插件文档填写相应的值</label>
<div>
{{foreach $plugins_view_admin_power_role_save_data as $hook}}
{{foreach $plugins_view_admin_role_save_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
......
......@@ -68,7 +68,8 @@ function FormModulePath($params = [])
{
// 参数变量
$path = '';
$controller = request()->controller();
$controller = request()->controller();
$action = request()->action();
// 是否插件调用
if($controller == 'Plugins')
......@@ -81,7 +82,10 @@ function FormModulePath($params = [])
$path = '\app\\'.request()->module().'\form\\'.$controller;
}
return $path;
return [
'module' => $path,
'action' => $action,
];
}
/**
......
......@@ -383,21 +383,21 @@ class Common extends Controller
public function FormTableInit()
{
// 获取表格模型
$module = FormModulePath($this->data_request);
if(!empty($module))
$data = FormModulePath($this->data_request);
if(!empty($data))
{
// 调用表格处理
$res = (new FormHandleModule())->Run($module, $this->data_request);
if($res['code'] == 0)
$ret = (new FormHandleModule())->Run($data['module'], $data['action'], $this->data_request);
if($ret['code'] == 0)
{
$this->form_table = $res['data']['table'];
$this->form_where = $res['data']['where'];
$this->form_params = $res['data']['params'];
$this->form_table = $ret['data']['table'];
$this->form_where = $ret['data']['where'];
$this->form_params = $ret['data']['params'];
$this->assign('form_table', $this->form_table);
$this->assign('form_params', $this->form_params);
} else {
$this->form_error = $res['msg'];
$this->form_error = $ret['msg'];
$this->assign('form_error', $this->form_error);
}
}
......
......@@ -41,9 +41,10 @@ class FormHandleModule
* @date 2020-06-02
* @desc description
* @param [string] $module [模块位置]
* @param [string] $action [模块方法(默认 Run 方法,可自动匹配控制器方法名)]
* @param [mixed] $params [参数数据]
*/
public function Run($module, $params = [])
public function Run($module, $action = 'Run', $params = [])
{
// 参数
$this->out_params = $params;
......@@ -54,12 +55,16 @@ class FormHandleModule
return DataReturn('表格模块未定义['.$module.']', -1);
}
// 调用方法
$action = 'Run';
// 指定方法检测
$this->module_obj = new $module();
if(!method_exists($this->module_obj, $action))
{
return DataReturn('表格方法未定义['.$module.'->'.$action.'()]', -1);
// 默认方法检测
$action = 'Run';
if(!method_exists($this->module_obj, $action))
{
return DataReturn('表格方法未定义['.$module.'->'.$action.'()]', -1);
}
}
// 获取表格配置数据
......
......@@ -13,7 +13,7 @@ namespace app\service;
use think\Db;
/**
* 权限服务层
* 权限菜单服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
......@@ -171,244 +171,6 @@ class AdminPowerService
return DataReturn('删除失败', -100);
}
/**
* 角色列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RoleList($params = [])
{
$where = empty($params['where']) ? [] : $params['where'];
$field = empty($params['field']) ? '*' : $params['field'];
$order_by = empty($params['order_by']) ? 'id desc' : trim($params['order_by']);
// 获取角色列表
$data = Db::name('Role')->where($where)->order($order_by)->select();
if(!empty($data))
{
foreach($data as &$v)
{
// 关联查询权限和角色数据
if($v['id'] == 1)
{
$v['item'] = Db::name('Power')->select();
} else {
$v['item'] = Db::name('Role')->alias('r')->join(['__ROLE_POWER__'=>'rp'], 'rp.role_id = r.id')->join(['__POWER__'=>'p'], 'rp.power_id = p.id')->where(array('r.id'=>$v['id']))->field('p.id,p.name')->select();
}
}
}
return $data;
}
/**
* 角色状态更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RoleStatusUpdate($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
[
'checked_type' => 'in',
'key_name' => 'state',
'checked_data' => [0,1],
'error_msg' => '状态有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据更新
if(Db::name('Role')->where(['id'=>intval($params['id'])])->update(['is_enable'=>intval($params['state'])]))
{
return DataReturn('编辑成功');
}
return DataReturn('编辑失败或数据未改变', -100);
}
/**
* 权限菜单编辑列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RolePowerEditData($params = [])
{
// 当前角色关联的所有菜单id
$action = empty($params['role_id']) ? [] : Db::name('RolePower')->where(['role_id'=>$params['role_id']])->column('power_id');
// 权限列表
$power_field = 'id,name,is_show';
$power = Db::name('Power')->field($power_field)->where(['pid'=>0])->order('sort')->select();
if(!empty($power))
{
foreach($power as &$v)
{
// 是否有权限
$v['is_power'] = in_array($v['id'], $action) ? 'ok' : 'no';
// 获取子权限
$item = Db::name('Power')->field($power_field)->where(array('pid'=>$v['id']))->order('sort')->select();
if(!empty($item))
{
foreach($item as $ks=>$vs)
{
$item[$ks]['is_power'] = in_array($vs['id'], $action) ? 'ok' : 'no';
}
$v['item'] = $item;
}
}
}
return $power;
}
/**
* 角色保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-07T00:24:14+0800
* @param [array] $params [输入参数]
*/
public static function RoleSave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'name',
'error_msg' => '角色名称不能为空',
],
[
'checked_type' => 'length',
'key_name' => 'name',
'checked_data' => '2,8',
'error_msg' => '角色名称格式 2~8 个字符之间',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 开启事务
Db::startTrans();
// 角色数据更新
$role_data = array(
'name' => $params['name'],
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
);
if(empty($params['id']))
{
$role_data['add_time'] = time();
$role_id = Db::name('Role')->insertGetId($role_data);
} else {
if(Db::name('Role')->where(['id'=>$params['id']])->update($role_data) !== false)
{
$role_id = $params['id'];
}
}
if(empty($role_id))
{
Db::rollback();
return DataReturn('角色数据保存失败', -2);
}
// 权限关联数据删除
if(Db::name('RolePower')->where(['role_id'=>$role_id])->delete() === false)
{
Db::rollback();
return DataReturn('角色权限操作失败', -3);
}
// 权限关联数据添加
if(!empty($params['power_id']))
{
$rp_data = [];
foreach(explode(',', $params['power_id']) as $power_id)
{
if(!empty($power_id))
{
$rp_data[] = [
'role_id' => $role_id,
'power_id' => $power_id,
'add_time' => time(),
];
}
}
if(!empty($rp_data))
{
if(Db::name('RolePower')->insertAll($rp_data) < count($rp_data))
{
Db::rollback();
return DataReturn('角色权限添加失败', -10);
}
}
}
// 提交事务
Db::commit();
// 清除用户权限数据
self::PowerCacheDelete();
return DataReturn('操作成功', 0);
}
/**
* 角色删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-07T00:24:14+0800
* @param [array] $params [输入参数]
*/
public static function RoleDelete($params = [])
{
// 参数是否有误
if(empty($params['id']))
{
return DataReturn('角色id有误', -1);
}
// 开启事务
Db::startTrans();
// 删除角色
if(Db::name('Role')->delete(intval($params['id'])) !== false && Db::name('RolePower')->where(['role_id'=>intval($params['id'])])->delete() !== false)
{
// 提交事务
Db::commit();
// 清除用户权限数据
self::PowerCacheDelete();
return DataReturn('删除成功', 0);
}
Db::rollback();
return DataReturn('删除失败', -100);
}
/**
* 后台管理员权限缓存数据清除
* @author Devil
......
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;
use think\Db;
use app\service\AdminPowerService;
/**
* 角色服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class AdminRoleService
{
/**
* 角色列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RoleList($params = [])
{
$where = empty($params['where']) ? [] : $params['where'];
$field = empty($params['field']) ? '*' : $params['field'];
$order_by = empty($params['order_by']) ? 'id desc' : trim($params['order_by']);
$m = isset($params['m']) ? intval($params['m']) : 0;
$n = isset($params['n']) ? intval($params['n']) : 10;
// 获取角色列表
$data = Db::name('Role')->field($field)->where($where)->order($order_by)->limit($m, $n)->select();
if(!empty($data))
{
foreach($data as &$v)
{
// 关联查询权限和角色数据
if($v['id'] == 1)
{
$v['items'] = Db::name('Power')->column('name');
} else {
$v['items'] = Db::name('Role')->alias('r')->join(['__ROLE_POWER__'=>'rp'], 'rp.role_id = r.id')->join(['__POWER__'=>'p'], 'rp.power_id = p.id')->where(array('r.id'=>$v['id']))->column('p.name');
}
// 时间
$v['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
$v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']);
}
}
return DataReturn('处理成功', 0, $data);
}
/**
* 角色总数
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-07
* @desc description
* @param [array] $where [条件]
*/
public static function RoleTotal($where = [])
{
return (int) Db::name('Role')->where($where)->count();
}
/**
* 角色状态更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RoleStatusUpdate($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
[
'checked_type' => 'in',
'key_name' => 'state',
'checked_data' => [0,1],
'error_msg' => '状态有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据更新
if(Db::name('Role')->where(['id'=>intval($params['id'])])->update(['is_enable'=>intval($params['state'])]))
{
return DataReturn('编辑成功');
}
return DataReturn('编辑失败或数据未改变', -100);
}
/**
* 权限菜单编辑列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function RolePowerEditData($params = [])
{
// 当前角色关联的所有菜单id
$action = empty($params['role_id']) ? [] : Db::name('RolePower')->where(['role_id'=>$params['role_id']])->column('power_id');
// 权限列表
$power_field = 'id,name,is_show';
$power = Db::name('Power')->field($power_field)->where(['pid'=>0])->order('sort')->select();
if(!empty($power))
{
foreach($power as &$v)
{
// 是否有权限
$v['is_power'] = in_array($v['id'], $action) ? 'ok' : 'no';
// 获取子权限
$item = Db::name('Power')->field($power_field)->where(array('pid'=>$v['id']))->order('sort')->select();
if(!empty($item))
{
foreach($item as $ks=>$vs)
{
$item[$ks]['is_power'] = in_array($vs['id'], $action) ? 'ok' : 'no';
}
$v['item'] = $item;
}
}
}
return $power;
}
/**
* 角色保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-07T00:24:14+0800
* @param [array] $params [输入参数]
*/
public static function RoleSave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'name',
'error_msg' => '角色名称不能为空',
],
[
'checked_type' => 'length',
'key_name' => 'name',
'checked_data' => '2,8',
'error_msg' => '角色名称格式 2~8 个字符之间',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 开启事务
Db::startTrans();
// 角色数据更新
$role_data = [
'name' => $params['name'],
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
'upd_time' => time(),
];
// 不存在添加,则更新
if(empty($params['id']))
{
$role_data['add_time'] = time();
$role_id = Db::name('Role')->insertGetId($role_data);
} else {
// 是否包含删除超级管理员角色
if($params['id'] == 1)
{
return DataReturn('超级管理员角色不可编辑', -1);
}
// 更新
if(Db::name('Role')->where(['id'=>$params['id']])->update($role_data) !== false)
{
$role_id = $params['id'];
}
}
if(empty($role_id))
{
Db::rollback();
return DataReturn('角色数据保存失败', -2);
}
// 权限关联数据删除
if(Db::name('RolePower')->where(['role_id'=>$role_id])->delete() === false)
{
Db::rollback();
return DataReturn('角色权限操作失败', -3);
}
// 权限关联数据添加
if(!empty($params['power_id']))
{
$rp_data = [];
foreach(explode(',', $params['power_id']) as $power_id)
{
if(!empty($power_id))
{
$rp_data[] = [
'role_id' => $role_id,
'power_id' => $power_id,
'add_time' => time(),
];
}
}
if(!empty($rp_data))
{
if(Db::name('RolePower')->insertAll($rp_data) < count($rp_data))
{
Db::rollback();
return DataReturn('角色权限添加失败', -10);
}
}
}
// 提交事务
Db::commit();
// 清除用户权限数据
AdminPowerService::PowerCacheDelete();
return DataReturn('操作成功', 0);
}
/**
* 角色删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-07T00:24:14+0800
* @param [array] $params [输入参数]
*/
public static function RoleDelete($params = [])
{
// 参数是否有误
if(empty($params['ids']))
{
return DataReturn('角色id有误', -1);
}
// 是否数组
if(!is_array($params['ids']))
{
$params['ids'] = explode(',', $params['ids']);
}
// 是否包含删除超级管理员角色
if(in_array(1, $params['ids']))
{
return DataReturn('超级管理员角色不可删除', -1);
}
// 开启事务
Db::startTrans();
// 删除角色
if(Db::name('Role')->where(['id'=>$params['ids']])->delete() !== false && Db::name('RolePower')->where(['role_id'=>$params['ids']])->delete() !== false)
{
// 提交事务
Db::commit();
// 清除用户权限数据
AdminPowerService::PowerCacheDelete();
return DataReturn('删除成功', 0);
}
Db::rollback();
return DataReturn('删除失败', -100);
}
}
?>
\ No newline at end of file
......@@ -302,7 +302,7 @@ class AdminService
// 参数是否有误
if(empty($params['ids']))
{
return DataReturn('商品id有误', -1);
return DataReturn('管理员id有误', -1);
}
// 是否数组
if(!is_array($params['ids']))
......
......@@ -968,78 +968,6 @@ class GoodsService
return self::GoodsDataHandle($params, $data);
}
/**
* 后台管理商品列表条件
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-10T22:16:29+0800
* @param [array] $params [输入参数]
*/
public static function GetAdminIndexWhere($params = [])
{
$where = [
['is_delete_time', '=', 0],
];
// id
if(!empty($params['id']))
{
$where[] = ['id', '=', intval($params['id'])];
}
// 模糊
if(!empty($params['keywords']))
{
$where[] = ['title|model|simple_desc|seo_title|seo_keywords|seo_keywords', 'like', '%'.$params['keywords'].'%'];
}
// 是否更多条件
if(isset($params['is_more']) && $params['is_more'] == 1)
{
// 等值
if(isset($params['is_shelves']) && $params['is_shelves'] > -1)
{
$where[] = ['is_shelves', '=', intval($params['is_shelves'])];
}
if(isset($params['is_home_recommended']) && $params['is_home_recommended'] > -1)
{
$where[] = ['is_home_recommended', '=', intval($params['is_home_recommended'])];
}
// 时间
if(!empty($params['time_start']))
{
$where[] = ['add_time', '>', strtotime($params['time_start'])];
}
if(!empty($params['time_end']))
{
$where[] = ['add_time', '<', strtotime($params['time_end'])];
}
// 商品分类
if(!empty($params['category_id']) && $params['category_id'] > 0)
{
$category_ids = self::GoodsCategoryItemsIds([intval($params['category_id'])], 1);
$goods_ids = Db::name('GoodsCategoryJoin')->where(['category_id'=>$category_ids])->column('goods_id');
if(!empty($goods_ids))
{
$where[] = ['id', 'in', $goods_ids];
} else {
// 避免空条件造成无效的错觉
$where[] = ['id', '=', 0];
}
}
// 品牌
if(!empty($params['brand_id']) && $params['brand_id'] > 0)
{
$where[] = ['brand_id', '=', intval($params['brand_id'])];
}
}
return $where;
}
/**
* 商品保存
* @author Devil
......
此差异已折叠。
文件模式从 100755 更改为 100644
/**
* 权限添加/编辑
*/
.tree-list li { list-style-type: none; padding-left: 5px !important; }
.tree-list li label { display: inline; }
.list-find { margin: 0px 0px 5px 35px; overflow: hidden; padding-top: 5px !important; }
.tree-list i { width: 10px; }
.list-find li { line-height: 26px; }
.list-find span { font-weight: normal; }
.tree-list li { border:1px dashed #d3ebf7; background: #f5fafd; padding: 6px 10px; }
.list-find li { background: #ecf8ff; float: left; margin: 0px 10px 10px 0px; }
.list-find li input[type="checkbox"] { vertical-align: text-top; }
@media only screen and (min-width: 641px) {
.list-submit, .find-submit { display: none; }
.list-find li:hover .find-submit, .tree-list li:hover .list-submit { display: block !important; }
}
\ No newline at end of file
......@@ -16,31 +16,6 @@ $(function()
$(this).parent().next('.list-find').toggle(100);
});
/**
* 全选/取消
*/
$('.node-choice').on('click', function()
{
var state = $(this).is(':checked');
$(this).parents('li').next('.list-find').find('input[type="checkbox"]').each(function()
{
this.checked = state;
});
});
/**
* 子元素选择/取消操作
*/
$('.list-find input[type="checkbox"]').on('click', function()
{
var state = ($(this).parents('.list-find').find('input[type="checkbox"]:checked').length > 0);
$(this).parents('ul').prev().find('label input').each(function()
{
this.checked = state;
});
});
/**
* 添加
*/
......
$(function()
{
/**
* 全选/取消
*/
$('.node-choice').on('click', function()
{
var state = $(this).is(':checked');
$(this).parents('li').next('.list-find').find('input[type="checkbox"]').each(function()
{
this.checked = state;
});
});
/**
* 子元素选择/取消操作
*/
$('.list-find input[type="checkbox"]').on('click', function()
{
var state = ($(this).parents('.list-find').find('input[type="checkbox"]:checked').length > 0);
$(this).parents('ul').prev().find('label input').each(function()
{
this.checked = state;
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册