<?php<364666827@qq.com>,开发者QQ群:50304283
namespace app\system\admin;
use app\common\controller\Common;
use app\system\model\SystemMenu as MenuModel;
use app\system\model\SystemRole as RoleModel;
use app\system\model\SystemUser as UserModel;
use app\system\model\SystemLog as LogModel;
use think\Db;
class Admin extends Common
{
protected $hisiModel = '';
protected $hisiTable = '';
protected $hisiValidate = false;
protected $hisiAddScene = false;
protected $hisiEditScene = false;
protected function initialize()
{
parent::initialize();
$model = new UserModel();
$login = $model->isLogin();
if (!$login['uid']) {
return $this->error('请登陆之后在操作', ROOT_DIR.config('sys.admin_path'));
}
if (!defined('ADMIN_ID')) {
define('ADMIN_ID', $login['uid']);
define('ADMIN_ROLE', $login['role_id']);
$curMenu = MenuModel::getInfo();
if ($curMenu) {
if (!RoleModel::checkAuth($curMenu['id']) &&
$curMenu['url'] != 'system/index/index') {
return $this->error('['.$curMenu['title'].'] 访问权限不足');
}
} else if (config('sys.admin_whitelist_verify')) {
return $this->error('节点不存在或者已禁用!');
} else {
$curMenu = ['title' => '', 'url' => '', 'id' => 0];
}
$this->_systemLog($curMenu['title']);
if (!$this->request->isAjax()) {
$breadCrumbs = [];
$menuParents = ['pid' => 1];
if ($curMenu['id']) {
$breadCrumbs = MenuModel::getBrandCrumbs($curMenu['id']);
$menuParents = current($breadCrumbs);
}
$breadCrumbs = MenuModel::getBrandCrumbs($curMenu['id']);
$this->assign('hisiBreadcrumb', $breadCrumbs);
$this->assign('hisiCurMenu', $curMenu);
$this->assign('hisiCurParents', $menuParents);
$this->assign('hisiMenus', MenuModel::getMainMenu());
$this->assign('hisiTabType', 0);
$this->assign('hisiTabData', '');
$this->assign('formData', '');
$this->assign('login', $login);
$this->assign('languages', model('SystemLanguage')->lists());
$this->view->engine->layout(true);
}
}
}
/**
* 系统日志记录
* @author 橘子俊 <364666827@qq.com>
* @return string
*/
private function _systemLog($title)
{
$log = [];
$log['uid'] = ADMIN_ID;
$log['title'] = $title ? $title : '未加入系统菜单';
$log['url'] = $this->request->url();
$log['remark'] = '浏览数据';
if ($this->request->isPost()) {
$log['remark'] = '保存数据';
}
$result = LogModel::where($log)->find();
$log['param'] = json_encode($this->request->param());
$log['ip'] = $this->request->ip();
if (!$result) {
LogModel::create($log);
} else {
$log['id'] = $result->id;
$log['count'] = $result->count+1;
LogModel::update($log);
}
}
/**
* 获取当前方法URL
* @author 橘子俊 <364666827@qq.com>
* @return string
*/
protected function getActUrl() {
$model = request()->module();
$controller = request()->controller();
$action = request()->action();
return $model.'/'.$controller.'/'.$action;
}
/**
* [通用方法]添加页面展示和保存
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function add()
{
if ($this->request->isPost()) {
$hisiModel = $this->request->param('hisiModel');
$hisiTable = $this->request->param('hisiTable');
$hisiValidate = $this->request->param('hisiValidate');
$hisiScene = $this->request->param('hisiScene');
if ($hisiModel) {
$this->hisiModel = $hisiModel;
$this->hisiTable = '';
}
if ($hisiTable) {
$this->hisiTable = $hisiTable;
$this->hisiModel = '';
}
if ($hisiValidate) {
$this->hisiValidate = $hisiValidate;
}
if ($hisiScene) {
$this->hisiAddScene = $hisiScene;
}
$postData = $this->request->post();
if ($this->hisiValidate)
if (strpos($this->hisiValidate, '\\') === false ) {
if (defined('IS_PLUGINS')) {
$this->hisiValidate = 'plugins\\'.$this->request->param('_p').'\\validate\\'.$this->hisiValidate;
} else {
$this->hisiValidate = 'app\\'.$this->request->module().'\\validate\\'.$this->hisiValidate;
}
}
if ($this->hisiAddScene) {
$this->hisiValidate = $this->hisiValidate.'.'.$this->hisiAddScene;
}
$result = $this->validate($postData, $this->hisiValidate);
if ($result !== true) {
return $this->error($result);
}
}
if ($this->hisiModel)
if (defined('IS_PLUGINS')) {
if (strpos($this->hisiModel, '\\') === false ) {
$this->hisiModel = 'plugins\\'.$this->request->param('_p').'\\model\\'.$this->hisiModel;
}
$model = new $this->hisiModel;
} else {
if (strpos($this->hisiModel, '/') === false ) {
$this->hisiModel = $this->request->module().'/'.$this->hisiModel;
}
$model = model($this->hisiModel);
}
if (!$model->save($postData)) {
return $this->error($model->getError());
}
} else if ($this->hisiTable)
if (!Db::name($this->hisiTable)->insert($postData)) {
return $this->error('保存失败');
}
} else {
return $this->error('当前控制器缺少属性(hisiModel、hisiTable至少定义一个)');
}
return $this->success('保存成功');
}
$template = $this->request->param('template', 'form');
return $this->fetch($template);
}
/**
* [通用方法]编辑页面展示和保存
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function edit()
{
$hisiModel = $this->request->param('hisiModel');
$hisiTable = $this->request->param('hisiTable');
if ($hisiModel) {
$this->hisiModel = $hisiModel;
$this->hisiTable = '';
}
if ($hisiTable) {
$this->hisiTable = $hisiTable;
$this->hisiModel = '';
}
if ($this->request->isPost())
$hisiValidate = $this->request->param('hisiValidate');
$hisiScene = $this->request->param('hisiScene');
if ($hisiValidate) {
$this->hisiValidate = $hisiValidate;
}
if ($hisiScene) {
$this->hisiEditScene = $hisiScene;
}
$postData = $this->request->post();
if ($this->hisiValidate) {
if (strpos($this->hisiValidate, '\\') === false ) {
if (defined('IS_PLUGINS')) {
$this->hisiValidate = 'plugins\\'.$this->request->param('_p').'\\validate\\'.$this->hisiValidate;
} else {
$this->hisiValidate = 'app\\'.$this->request->module().'\\validate\\'.$this->hisiValidate;
}
}
if ($this->hisiEditScene) {
$this->hisiValidate = $this->hisiValidate.'.'.$this->hisiEditScene;
}
$result = $this->validate($postData, $this->hisiValidate);
if ($result !== true) {
return $this->error($result);
}
}
}
if ($this->hisiModel)
if (defined('IS_PLUGINS')) {
if (strpos($this->hisiModel, '\\') === false ) {
$this->hisiModel = 'plugins\\'.$this->request->param('_p').'\\model\\'.$this->hisiModel;
}
$model = new $this->hisiModel;
} else {
if (strpos($this->hisiModel, '/') === false ) {
$this->hisiModel = $this->request->module().'/'.$this->hisiModel;
}
$model = model($this->hisiModel);
}
$pk = $model->getPk();
$id = $this->request->param($pk);
if ($this->request->isPost()) {
if ($model->save($postData, [$pk => $id]) === false) {
return $this->error($model->getError());
}
return $this->success('保存成功');
}
$formData = $model->get($id);
} else if ($this->hisiTable)
$db = Db::name($this->hisiTable);
$pk = $db->getPk();
$id = $this->request->param($pk);
if ($this->request->isPost()) {
if (!$db->where($pk, $id)->update($postData)) {
return $this->error('保存失败');
}
return $this->success('保存成功');
}
$formData = $db->where($pk, $id)->find();
} else {
return $this->error('当前控制器缺少属性(hisiModel、hisiTable至少定义一个)');
}
$this->assign('formData', $formData);
$template = $this->request->param('template', 'form');
return $this->fetch($template);
}
/**
* [通用方法]状态设置
* 禁用、启用都是调用这个内部方法
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function status()
{
$val = $this->request->param('val/d');
$id = $this->request->param('id/a');
$field = $this->request->param('field/s', 'status');
$hisiModel = $this->request->param('hisiModel');
$hisiTable = $this->request->param('hisiTable');
if ($hisiModel) {
$this->hisiModel = $hisiModel;
$this->hisiTable = '';
}
if ($hisiTable) {
$this->hisiTable = $hisiTable;
$this->hisiModel = '';
}
if (empty($id)) {
return $this->error('缺少id参数');
}
if ($this->hisiModel == 'SystemMenu') {
if (in_array('1', $id) || in_array('2', $id) || in_array('3', $id)) {
return $this->error('系统限制操作');
}
}
if ($this->hisiModel) {
if (defined('IS_PLUGINS')) {
if (strpos($this->hisiModel, '\\') === false ) {
$this->hisiModel = 'plugins\\'.$this->request->param('_p').'\\model\\'.$this->hisiModel;
}
$obj = new $this->hisiModel;
} else {
if (strpos($this->hisiModel, '/') === false ) {
$this->hisiModel = $this->request->module().'/'.$this->hisiModel;
}
$obj = model($this->hisiModel);
}
} else if ($this->hisiTable) {
$obj = db($this->hisiTable);
} else {
return $this->error('当前控制器缺少属性(hisiModel、hisiTable至少定义一个)');
}
$pk = $obj->getPk();
$result = $obj->where([$pk => $id])->setField($field, $val);
if ($result === false) {
return $this->error('状态设置失败');
}
return $this->success('状态设置成功');
}
/**
* [通用方法]删除单条记录
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function del()
{
$id = $this->request->param('id/a');
$hisiModel = $this->request->param('hisiModel');
$hisiTable = $this->request->param('hisiTable');
if ($hisiModel) {
$this->hisiModel = $hisiModel;
$this->hisiTable = '';
}
if ($hisiTable) {
$this->hisiTable = $hisiTable;
$this->hisiModel = '';
}
if (empty($id)) {
return $this->error('缺少id参数');
}
if ($this->hisiModel) {
if (defined('IS_PLUGINS')) {
if (strpos($this->hisiModel, '\\') === false ) {
$this->hisiModel = 'plugins\\'.$this->request->param('_p').'\\model\\'.$this->hisiModel;
}
$obj = new $this->hisiModel;
} else {
if (strpos($this->hisiModel, '/') === false ) {
$this->hisiModel = $this->request->module().'/'.$this->hisiModel;
}
$obj = model($this->hisiModel);
}
$result = $obj->destroy($id);
} else if ($this->hisiTable) {
$obj = db($this->hisiTable);
$pk = $obj->getPk();
$result = $obj->where([$pk => $id])->delete();
} else {
return $this->error('当前控制器缺少属性(hisiModel、hisiTable至少定义一个)');
}
if ($result === false) {
return $this->error('删除失败');
}
return $this->success('删除成功');
}
/**
* [通用方法]排序
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function sort()
{
$id = $this->request->param('id/a');
$field = $this->request->param('field/s', 'sort');
$val = $this->request->param('val/d');
$hisiModel = $this->request->param('hisiModel');
$hisiTable = $this->request->param('hisiTable');
if ($hisiModel) {
$this->hisiModel = $hisiModel;
$this->hisiTable = '';
}
if ($hisiTable) {
$this->hisiTable = $hisiTable;
$this->hisiModel = '';
}
if (empty($id)) {
return $this->error('缺少id参数');
}
if ($this->hisiModel) {
if (defined('IS_PLUGINS')) {
if (strpos($this->hisiModel, '\\') === false ) {
$this->hisiModel = 'plugins\\'.$this->request->param('_p').'\\model\\'.$this->hisiModel;
}
$obj = new $this->hisiModel;
} else {
if (strpos($this->hisiModel, '/') === false ) {
$this->hisiModel = $this->request->module().'/'.$this->hisiModel;
}
$obj = model($this->hisiModel);
}
} else if ($this->hisiTable) {
$obj = db($this->hisiTable);
} else {
return $this->error('当前控制器缺少属性(hisiModel、hisiTable至少定义一个)');
}
$pk = $obj->getPk();
$result = $obj->where([$pk => $id])->setField($field, $val);
if ($result === false) {
return $this->error('排序设置失败');
}
return $this->success('排序设置成功');
}
}