调整admin下的类库代码,将主要逻辑调整到extend下

This commit is contained in:
2023-09-23 17:30:45 +08:00
parent ea9b8b0e71
commit bee15dfea6
122 changed files with 5820 additions and 3837 deletions

View File

@@ -0,0 +1,147 @@
<?php
namespace base\admin\service;
use app\admin\model\MallCate;
use app\admin\model\MallGoods;
use app\admin\model\MallTag;
use app\admin\model\SystemAdmin;
use app\admin\model\SystemAuth;
use app\admin\model\SystemAuthNode;
use app\admin\model\SystemConfig;
use app\admin\model\SystemMenu;
use app\admin\model\SystemNode;
use app\admin\model\SystemQuick;
use app\common\constants\AdminConstant;
class InitAdminServiceClass
{
protected $output = null;
public function __construct($output)
{
$this->output = $output;
}
public function init()
{
$this->initAdmin();
$this->initAuth();
$this->initConfig();
$this->initMenu();
$this->initQuick();
$this->initMall();
}
public function initMall()
{
$output = $this->output;
$output->writeln('开始初始化商城案例');
$list_cate = $this->requireData('MallCate');
$list_goods = $this->requireData('MallGoods');
foreach ($list_cate as $data_cate) {
$model_cate = MallCate::create($data_cate);
foreach ($list_goods as $data_goods) {
$data_goods['cate_id'] = $model_cate->id;
MallGoods::create($data_goods);
}
}
$list_tag = $this->requireData('MallTag');
$this->installData(MallTag::class, $list_tag);
}
public function initQuick()
{
$output = $this->output;
$output->writeln('开始初始化快捷入口');
$list_quick = $this->requireData('SystemQuick');
$this->installData(SystemQuick::class, $list_quick);
}
public function initMenu()
{
$output = $this->output;
$output->writeln('开始初始化系统菜单');
$list_menu = $this->requireData('SystemMenu');
$this->installData(SystemMenu::class, $list_menu);
}
public function initConfig()
{
$output = $this->output;
$output->writeln('开始初始化系统设置');
$list_config = $this->requireData('SystemConfig');
$this->installData(SystemConfig::class, $list_config);
}
public function initAdmin()
{
$output = $this->output;
$output->writeln('创建超级管理员');
$model_admin = SystemAdmin::find(AdminConstant::SUPER_ADMIN_ID);
if (empty($model_admin)) {
$model_admin = new SystemAdmin();
$model_admin->id = AdminConstant::SUPER_ADMIN_ID;
$model_admin->head_img = '/static/admin/images/head.jpg';
$model_admin->username = 'admin';
$model_admin->password = password(123456);
$model_admin->status = 1;
$model_admin->save();
$output->writeln('创建超级管理员成功');
} else {
$output->writeln('超级管理员已存在,无需初始化');
}
}
public function initAuth()
{
$output = $this->output;
$output->writeln('开始初始化权限');
$list_auth = $this->requireData('SystemAuth');
$this->installData(SystemAuth::class, $list_auth);
$output->writeln('开始初始化权限节点');
$list_auth_node = $this->requireData('SystemAuthNode');
$this->installData(SystemAuthNode::class, $list_auth_node);
$output->writeln('开始初始化系统节点');
$list_node = $this->requireData('SystemNode');
$this->installData(SystemNode::class, $list_node);
}
protected function installData($model_name, $list)
{
foreach ($list as $key => $value) {
$model_name::create($value);
}
}
protected function requireData($table_name)
{
return include __DIR__ . '/initAdminData/' . $table_name . '.php';
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace base\admin\service;
use app\admin\service\node\Node;
class NodeServiceClass
{
/**
* 获取节点服务
* @return array
* @throws \Doctrine\Common\Annotations\AnnotationException
* @throws \ReflectionException
*/
public function getNodelist()
{
$basePath = base_path() . 'admin' . DIRECTORY_SEPARATOR . 'controller';
$baseNamespace = "app\admin\controller";
$nodeList = (new Node($basePath, $baseNamespace))
->getNodelist();
return $nodeList;
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace base\admin\service;
use think\facade\Cache;
class TriggerServiceClass
{
/**
* 更新菜单缓存.
* @param null $adminId
* @return bool
*/
public static function updateMenu($adminId = null)
{
if (empty($adminId)) {
Cache::tag('initAdmin')->clear();
} else {
Cache::delete('initAdmin_' . $adminId);
}
return true;
}
/**
* 更新节点缓存.
* @param null $adminId
* @return bool
*/
public static function updateNode($adminId = null)
{
if (empty($adminId)) {
Cache::tag('authNode')->clear();
} else {
Cache::delete('allAuthNode_' . $adminId);
}
return true;
}
/**
* 更新系统设置缓存.
* @return bool
*/
public static function updateSysconfig()
{
Cache::tag('sysconfig')->clear();
return true;
}
}

View File

@@ -0,0 +1,47 @@
<?php
// +----------------------------------------------------------------------
// | EasyAdmin
// +----------------------------------------------------------------------
// | PHP交流群: 763822524
// +----------------------------------------------------------------------
// | 开源协议 https://mit-license.org
// +----------------------------------------------------------------------
// | github开源项目https://github.com/zhongshaofa/EasyAdmin
// +----------------------------------------------------------------------
namespace base\admin\service\annotation;
use Doctrine\Common\Annotations\Annotation\Attributes;
use Doctrine\Common\Annotations\Annotation\Required;
use Doctrine\Common\Annotations\Annotation\Target;
/**
* Class ControllerAnnotation.
*
* @Annotation
* @Target("CLASS")
* @Attributes({
* @Attribute("title", type="string"),
* })
*
* @since 2.0
*/
class ControllerAnnotationClass
{
/**
* Route group prefix for the controller.
*
* @Required()
*
* @var string
*/
public $title = '';
/**
* 是否开启权限控制.
* @Enum({true,false})
* @var bool
*/
public $auth = true;
}

View File

@@ -0,0 +1,47 @@
<?php
// +----------------------------------------------------------------------
// | EasyAdmin
// +----------------------------------------------------------------------
// | PHP交流群: 763822524
// +----------------------------------------------------------------------
// | 开源协议 https://mit-license.org
// +----------------------------------------------------------------------
// | github开源项目https://github.com/zhongshaofa/EasyAdmin
// +----------------------------------------------------------------------
namespace base\admin\service\annotation;
use Doctrine\Common\Annotations\Annotation\Attributes;
/**
* 创建节点注解类.
*
* @Annotation
* @Target({"METHOD","CLASS"})
* @Attributes({
* @Attribute("time", type = "int")
* })
*/
class NodeAnotationClass
{
/**
* 节点名称.
* @Required()
* @var string
*/
public $title;
/**
* 是否开启权限控制.
* @Enum({true,false})
* @var bool
*/
public $auth = true;
/**
* 节点 一般无需设置.
* @var string
*/
public $name;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
<?php
namespace base\admin\service\curd\exceptions;
class CurdExceptionClass extends \Exception
{
}

View File

@@ -0,0 +1,7 @@
<?php
namespace base\admin\service\curd\exceptions;
class FileExceptionClass extends \Exception
{
}

View File

@@ -0,0 +1,7 @@
<?php
namespace base\admin\service\curd\exceptions;
class TableExceptionClass extends \Exception
{
}

View File

@@ -0,0 +1,30 @@
<?php
namespace {{controllerNamespace}};
use app\common\controller\AdminController;
use app\admin\service\annotation\ControllerAnnotation;
use app\admin\service\annotation\NodeAnotation;
use think\App;
/**
* @ControllerAnnotation(title="{{controllerAnnotation}}")
*/
class {{controllerName}} extends AdminController
{
use \app\admin\traits\Curd;
public function __construct(App $app)
{
parent::__construct($app);
$this->model = new {{modelFilename}}();
{{selectList}}
}
{{indexMethod}}
{{exportMethod}}
}

View File

@@ -0,0 +1,31 @@
/**
* @NodeAnotation(title="导出")
*/
public function export()
{
list($page, $limit, $where) = $this->buildTableParames();
$this->model = $this->model{{relationIndexMethod}};
$fields = $this->request->param('fields', '{}', null);
$image_fields = $this->request->param('image_fields', '{}', null);
$select_fields = $this->request->param('select_fields', '{}', null);
$date_fields = $this->request->param('date_fields', '{}', null);
$fields = json_decode($fields, true);
$image_fields = json_decode($image_fields, true);
$select_fields = json_decode($select_fields, true);
$date_fields = json_decode($date_fields, true);
$content = \app\common\tools\ExportTools::excel($this->model, $where, $fields, $image_fields, $select_fields, $date_fields);
$export_file_name = $this->exportFileName;
if (empty($export_file_name)) {
$export_file_name = $this->model->getName();
}
return download($content, $export_file_name . date('YmdHis') . '.xlsx', true);
}

View File

@@ -0,0 +1,31 @@
/**
* @NodeAnotation(title="列表")
*/
public function index()
{
if ($this->request->isAjax()) {
if (input('selectFields')) {
return $this->selectList();
}
list($page, $limit, $where) = $this->buildTableParames();
$count = $this->model
{{relationIndexMethod}}
->where($where)
->count();
$list = $this->model
{{relationIndexMethod}}
->where($where)
->page($page, $limit)
->order($this->sort)
->select();
$data = [
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list,
];
return json($data);
}
return $this->fetch();
}

View File

@@ -0,0 +1,2 @@
$this->assign('{{var_name}}', $this->model::{{name}}, true);

View File

@@ -0,0 +1,10 @@
var init = {
table_elem: '#currentTable',
table_render_id: 'currentTableRenderId',
index_url: '{{controllerUrl}}/index',
add_url: '{{controllerUrl}}/add',
edit_url: '{{controllerUrl}}/edit',
delete_url: '{{controllerUrl}}/delete',
export_url: '{{controllerUrl}}/export',
modify_url: '{{controllerUrl}}/modify',
};

View File

@@ -0,0 +1,3 @@
$(function(){
ua.listen();
})

View File

@@ -0,0 +1,3 @@
$(function(){
ua.listen();
})

View File

@@ -0,0 +1,10 @@
$(function(){
ua.table.render({
init: init,
cols: [[
{{indexCols}}
]],
});
ua.listen();
})

View File

@@ -0,0 +1,21 @@
<?php
namespace {{modelNamespace}};
use app\common\model\TimeModel;
/**
{{doc_content}}
*/
class {{modelName}} extends TimeModel
{
protected $name = "{{table}}";
protected $deleteTime = {{deleteTime}};
{{selectList}}
{{relationList}}
}

View File

@@ -0,0 +1,5 @@
public function {{relationMethod}}()
{
return $this->belongsTo('{{relationModel}}', '{{foreignKey}}', '{{primaryKey}}');
}

View File

@@ -0,0 +1,2 @@
public const {{name}} = {{values}};

View File

@@ -0,0 +1,11 @@
<div class="layuimini-container">
<form id="app-form" class="layui-form layuimini-form">
{{formList}}
<div class="hr-line"></div>
<div class="layui-form-item text-center">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button>
</div>
</form>
</div>

View File

@@ -0,0 +1,13 @@
<div class="layuimini-container">
<div class="layuimini-main">
<table id="currentTable" class="layui-table layui-hide"
data-auth-index="{:auth('{{controllerUrl}}/index')}"
data-auth-add="{:auth('{{controllerUrl}}/add')}"
data-auth-edit="{:auth('{{controllerUrl}}/edit')}"
data-auth-delete="{:auth('{{controllerUrl}}/delete')}"
data-auth-export="{:auth('{{controllerUrl}}/export')}"
data-auth-modify="{:auth('{{controllerUrl}}/modify')}"
lay-filter="currentTable">
</table>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
{{define}}
</div>
</div>

View File

@@ -0,0 +1,3 @@
{foreach ${{name}} as $k=>$v}
<input type="checkbox" name="{{field}}[]" value="{$k}" lay-skin="primary" title="{$v}" {{select}}>
{/foreach}

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
{{define}}
</div>
</div>

View File

@@ -0,0 +1 @@
<input class="layui-input" name="{{field}}" data-toggle="city-picker" {{required}} value="{{value}}" type="text" data-level="{{level}}" readonly {{submit_field_content}}>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<input type="text" name="{{field}}" data-date="" data-date-type="{{define}}" class="layui-input" {{required}} placeholder="请输入{{comment}}" value="{{value}}">
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<textarea name="{{field}}" rows="20" class="layui-textarea editor" placeholder="请输入{{comment}}">{{value}}</textarea>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="layui-form-item">
<label class="layui-form-label required">{{comment}}</label>
<div class="layui-input-block layuimini-upload">
<input name="{{field}}" class="layui-input layui-col-xs6" {{required}} placeholder="请上传{{comment}}" value="{{value}}">
<div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="{{field}}" data-upload-number="one" data-upload-exts="zip" data-upload-icon="file" data-upload-disable-preview="0"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_{{field}}" data-upload-select="{{field}}" data-upload-number="one" data-upload-mimetype="*"><i class="fa fa-list"></i> 选择</a></span>
</div>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="layui-form-item">
<label class="layui-form-label required">{{comment}}</label>
<div class="layui-input-block layuimini-upload">
<input name="{{field}}" class="layui-input layui-col-xs6" {{required}} placeholder="请上传{{comment}}" value="{{value}}">
<div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="{{field}}" data-upload-number="more" data-upload-exts="zip" data-upload-icon="file" data-upload-disable-preview="0"><i class="fa fa-upload" data-upload-sign="{{define}}" ></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_{{field}}" data-upload-select="{{field}}" data-upload-number="more" data-upload-mimetype="*" data-upload-sign="{{define}}"><i class="fa fa-list"></i> 选择</a></span>
</div>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="layui-form-item">
<label class="layui-form-label required">{{comment}}</label>
<div class="layui-input-block layuimini-upload">
<input name="{{field}}" class="layui-input layui-col-xs6" {{required}} placeholder="请上传{{comment}}" value="{{value}}">
<div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="{{field}}" data-upload-number="one" data-upload-exts="*image" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_{{field}}" data-upload-select="{{field}}" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span>
</div>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="layui-form-item">
<label class="layui-form-label required">{{comment}}</label>
<div class="layui-input-block layuimini-upload">
<input name="{{field}}" class="layui-input layui-col-xs6" {{required}} placeholder="请上传{{comment}}" value="{{value}}">
<div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="{{field}}" data-upload-number="more" data-upload-exts="*image" data-upload-icon="image" data-upload-sign="{{define}}"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_{{field}}" data-upload-select="{{field}}" data-upload-number="more" data-upload-mimetype="image/*" data-upload-sign="{{define}}"><i class="fa fa-list"></i> 选择</a></span>
</div>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<input type="text" name="{{field}}" class="layui-input" {{required}} placeholder="请输入{{comment}}" value="{{value}}">
</div>
</div>

View File

@@ -0,0 +1,4 @@
<option value=''></option>
{foreach ${{name}} as $k=>$v}
<option value='{$k}' {{select}}>{$v}</option>
{/foreach}

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
{{define}}
</div>
</div>

View File

@@ -0,0 +1,3 @@
{foreach ${{name}} as $k=>$v}
<input type="radio" name="{{field}}" value="{$k}" title="{$v}" {{select}}>
{/foreach}

View File

@@ -0,0 +1,9 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<select name="{{field}}" {{required}}>
{{define}}
</select>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
{{define}}
</div>
</div>

View File

@@ -0,0 +1,3 @@
<div data-toggle="table-data" data-index="{:__url('{{controller_url}}/index')}" data-select-type="{{type}}" data-select-value="{{value}}" data-value-field="{{valueField}}" data-name="{{field}}" data-field-name="{{fieldName}}" data-required="{{required}}">
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<div data-toggle="tag-input" data-name="{{field}}" data-value="{{value}}" data-required="{{required_text}}"></div>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">{{comment}}</label>
<div class="layui-input-block">
<textarea name="{{field}}" class="layui-textarea" {{required}} placeholder="请输入{{comment}}">{{value}}</textarea>
</div>
</div>

View File

@@ -0,0 +1,12 @@
<?php
$ul_mall_cate = array(
array(
"title" => "手机",
"image" => "http://admin.demo.ulthon.com/upload/20220417/72ef1d769595627af51d76c612a789bf.png",
"sort" => 0,
"status" => 1,
"remark" => "",
)
);
return $ul_mall_cate;

View File

@@ -0,0 +1,34 @@
<?php
$ul_mall_goods = array(
array(
"title" => "落地-风扇",
"logo" => "http://admin.demo.ulthon.com/upload/20220417/72ef1d769595627af51d76c612a789bf.png",
"images" => "http://admin.host/upload/20200514/95496713918290f6315ea3f87efa6bf2.jpg|http://admin.host/upload/20200514/ae29fa9cba4fc02defb7daed41cb2b13.jpg|http://admin.host/upload/20200514/f0a104d88ec7dc6fb42d2f87cbc71b76.jpg|http://admin.host/upload/20200514/3b88be4b1934690e5c1bd6b54b9ab5c8.jpg",
"describe" => "&lt;p&gt;76654757&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://admin.host/upload/20200515/198070421110fa01f2c2ac2f52481647.jpg&quot; style=&quot;height:689px; width:790px&quot; /&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://admin.host/upload/20200515/a07a742c15a78781e79f8a3317006c1d.jpg&quot; style=&quot;height:877px; width:790px&quot; /&gt;&lt;/p&gt;\n",
"market_price" => 599.00,
"discount_price" => 368.00,
"sales" => 0,
"virtual_sales" => 594,
"stock" => 0,
"total_stock" => 0,
"sort" => 675,
"status" => 1,
"remark" => "",
),
array(
"title" => "电脑",
"logo" => "http://admin.demo.ulthon.com/upload/20220417/72ef1d769595627af51d76c612a789bf.png",
"images" => "http://admin.host/upload/20200514/f0a104d88ec7dc6fb42d2f87cbc71b76.jpg",
"describe" => "&lt;p&gt;477&lt;/p&gt;\n",
"market_price" => 0.00,
"discount_price" => 0.00,
"sales" => 0,
"virtual_sales" => 0,
"stock" => 115,
"total_stock" => 320,
"sort" => 0,
"status" => 1,
"remark" => "",
)
);
return $ul_mall_goods;

View File

@@ -0,0 +1,32 @@
<?php
$ul_mall_tag = array(
array(
"id" => 1,
"title" => "便宜",
"create_time" => 1657347818,
"update_time" => 1657347818,
"delete_time" => 0
),
array(
"id" => 2,
"title" => "售后",
"create_time" => 1657347825,
"update_time" => 1657347825,
"delete_time" => 0
),
array(
"id" => 3,
"title" => "黑科技",
"create_time" => 1657347836,
"update_time" => 1657347836,
"delete_time" => 0
),
array(
"id" => 4,
"title" => "大厂",
"create_time" => 1657347850,
"update_time" => 1657347850,
"delete_time" => 0
)
);
return $ul_mall_tag;

View File

@@ -0,0 +1,21 @@
<?php
$ul_system_auth = array(
array(
"id" => 1,
"title" => "管理员",
"sort" => 1,
"status" => 1,
"remark" => "测试管理员",
),
array(
"id" => 6,
"title" => "游客权限",
"sort" => 0,
"status" => 1,
"remark" => "",
)
);
return $ul_system_auth;

View File

@@ -0,0 +1,5 @@
<?php
$ul_system_auth_node = array(
);
return $ul_system_auth_node;

View File

@@ -0,0 +1,256 @@
<?php
$ul_system_config = array(
array(
"name" => "alisms_access_key_id",
"group" => "sms",
"value" => "填你的",
"remark" => "阿里大于公钥",
"sort" => 0,
),
array(
"name" => "alisms_access_key_secret",
"group" => "sms",
"value" => "填你的",
"remark" => "阿里大鱼私钥",
"sort" => 0,
),
array(
"name" => "upload_type",
"group" => "upload",
"value" => "local_public",
"remark" => "当前上传方式 local_public,alioss,qnoss,txoss",
"sort" => 0,
),
array(
"name" => "upload_allow_ext",
"group" => "upload",
"value" => "jpg,jpeg,png,gif,bmp,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,7z,txt,mp3,wma,wav,mid,m4a,mp4,avi,wmv,3gp,flv,webp,svg,ico",
"remark" => "允许上传的文件类型",
"sort" => 0,
),
array(
"name" => "upload_allow_size",
"group" => "upload",
"value" => "1024000",
"remark" => "允许上传的大小",
"sort" => 0,
),
array(
"name" => "upload_allow_mime",
"group" => "upload",
"value" => "image/gif,image/jpeg,video/x-msvideo,text/plain,image/png",
"remark" => "允许上传的文件mime",
"sort" => 0,
),
array(
"name" => "upload_allow_type",
"group" => "upload",
"value" => "local_public,alioss,qnoss,txcos",
"remark" => "可用的上传文件方式",
"sort" => 0,
),
array(
"name" => "alioss_access_key_id",
"group" => "upload",
"value" => "填你的",
"remark" => "阿里云oss公钥",
"sort" => 0,
),
array(
"name" => "alioss_access_key_secret",
"group" => "upload",
"value" => "填你的",
"remark" => "阿里云oss私钥",
"sort" => 0,
),
array(
"name" => "alioss_endpoint",
"group" => "upload",
"value" => "填你的",
"remark" => "阿里云oss数据中心",
"sort" => 0,
),
array(
"name" => "alioss_bucket",
"group" => "upload",
"value" => "填你的",
"remark" => "阿里云oss空间名称",
"sort" => 0,
),
array(
"name" => "alioss_domain",
"group" => "upload",
"value" => "填你的",
"remark" => "阿里云oss访问域名",
"sort" => 0,
),
array(
"name" => "logo_title",
"group" => "site",
"value" => "ulthon_admin",
"remark" => "LOGO标题",
"sort" => 0,
),
array(
"name" => "logo_image",
"group" => "site",
"value" => "/static/common/images/logo-2.png",
"remark" => "logo图片",
"sort" => 0,
),
array(
"name" => "site_name",
"group" => "site",
"value" => "ulthon_admin后台系统",
"remark" => "站点名称",
"sort" => 0,
),
array(
"name" => "site_ico",
"group" => "site",
"value" => "/favicon.ico",
"remark" => "浏览器图标",
"sort" => 0,
),
array(
"name" => "site_copyright",
"group" => "site",
"value" => "填你的",
"remark" => "版权信息",
"sort" => 0,
),
array(
"name" => "site_beian",
"group" => "site",
"value" => "填你的",
"remark" => "备案信息",
"sort" => 0,
),
array(
"name" => "site_version",
"group" => "site",
"value" => "2.0.0",
"remark" => "版本信息",
"sort" => 0,
),
array(
"name" => "sms_type",
"group" => "sms",
"value" => "alisms",
"remark" => "短信类型",
"sort" => 0,
),
array(
"name" => "miniapp_appid",
"group" => "wechat",
"value" => "填你的",
"remark" => "小程序公钥",
"sort" => 0,
),
array(
"name" => "miniapp_appsecret",
"group" => "wechat",
"value" => "填你的",
"remark" => "小程序私钥",
"sort" => 0,
),
array(
"name" => "web_appid",
"group" => "wechat",
"value" => "填你的",
"remark" => "公众号公钥",
"sort" => 0,
),
array(
"name" => "web_appsecret",
"group" => "wechat",
"value" => "填你的",
"remark" => "公众号私钥",
"sort" => 0,
),
array(
"name" => "txcos_secret_id",
"group" => "upload",
"value" => "填你的",
"remark" => "腾讯云cos密钥",
"sort" => 0,
),
array(
"name" => "txcos_secret_key",
"group" => "upload",
"value" => "填你的",
"remark" => "腾讯云cos私钥",
"sort" => 0,
),
array(
"name" => "txcos_region",
"group" => "upload",
"value" => "填你的",
"remark" => "存储桶地域",
"sort" => 0,
),
array(
"name" => "txcos_bucket",
"group" => "upload",
"value" => "填你的",
"remark" => "存储桶名称",
"sort" => 0,
),
array(
"name" => "qnoss_access_key",
"group" => "upload",
"value" => "填你的",
"remark" => "访问密钥",
"sort" => 0,
),
array(
"name" => "qnoss_secret_key",
"group" => "upload",
"value" => "填你的",
"remark" => "安全密钥",
"sort" => 0,
),
array(
"name" => "qnoss_bucket",
"group" => "upload",
"value" => "填你的",
"remark" => "存储空间",
"sort" => 0,
),
array(
"name" => "qnoss_domain",
"group" => "upload",
"value" => "填你的",
"remark" => "访问域名",
"sort" => 0,
),
array(
"name" => "txcos_domain",
"group" => "upload",
"value" => "填你的",
"remark" => "访问域名",
"sort" => 0,
),
array(
"name" => "txcos_appid",
"group" => "upload",
"value" => "填你的",
"remark" => "APPID",
"sort" => 0,
),
array(
"name" => "file",
"group" => "site",
"value" => "",
"remark" => "",
"sort" => 0,
),
array(
"name" => "site_domain",
"group" => "site",
"value" => "http://admin.demo.ulthon.com",
"remark" => "",
"sort" => 0,
)
);
return $ul_system_config;

View File

@@ -0,0 +1,160 @@
<?php
$ul_system_menu = array(
array(
"id" => 227,
"pid" => 99999999,
"title" => "后台首页",
"icon" => "fa fa-home",
"href" => "index/welcome",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 228,
"pid" => 0,
"title" => "系统管理",
"icon" => "fa fa-cog",
"href" => "",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 234,
"pid" => 228,
"title" => "菜单管理",
"icon" => "fa fa-tree",
"href" => "system.menu/index",
"params" => "",
"target" => "_self",
"sort" => 10,
"status" => 1,
),
array(
"id" => 244,
"pid" => 228,
"title" => "管理员管理",
"icon" => "fa fa-user",
"href" => "system.admin/index",
"params" => "",
"target" => "_self",
"sort" => 12,
"status" => 1,
),
array(
"id" => 245,
"pid" => 228,
"title" => "角色管理",
"icon" => "fa fa-bitbucket-square",
"href" => "system.auth/index",
"params" => "",
"target" => "_self",
"sort" => 11,
"status" => 1,
),
array(
"id" => 246,
"pid" => 228,
"title" => "节点管理",
"icon" => "fa fa-list",
"href" => "system.node/index",
"params" => "",
"target" => "_self",
"sort" => 9,
"status" => 1,
),
array(
"id" => 247,
"pid" => 228,
"title" => "配置管理",
"icon" => "fa fa-asterisk",
"href" => "system.config/index",
"params" => "",
"target" => "_self",
"sort" => 8,
"status" => 1,
),
array(
"id" => 248,
"pid" => 228,
"title" => "上传管理",
"icon" => "fa fa-arrow-up",
"href" => "system.uploadfile/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 249,
"pid" => 0,
"title" => "商城管理",
"icon" => "fa fa-list",
"href" => "",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 250,
"pid" => 249,
"title" => "商品分类",
"icon" => "fa fa-calendar-check-o",
"href" => "mall.cate/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 251,
"pid" => 249,
"title" => "商品管理",
"icon" => "fa fa-list",
"href" => "mall.goods/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 252,
"pid" => 228,
"title" => "快捷入口",
"icon" => "fa fa-list",
"href" => "system.quick/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 253,
"pid" => 228,
"title" => "日志管理",
"icon" => "fa fa-connectdevelop",
"href" => "debug.log/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
array(
"id" => 254,
"pid" => 249,
"title" => "商品标签",
"icon" => "fa fa-connectdevelop",
"href" => "mall.tag/index",
"params" => "",
"target" => "_self",
"sort" => 0,
"status" => 1,
),
);
return $ul_system_menu;

View File

@@ -0,0 +1,726 @@
<?php
$ul_system_node = array(
array(
"id" => 1,
"node" => "system.admin",
"title" => "管理员管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 2,
"node" => "system.admin/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 3,
"node" => "system.admin/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 4,
"node" => "system.admin/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 5,
"node" => "system.admin/password",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 6,
"node" => "system.admin/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 7,
"node" => "system.admin/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347263,
"update_time" => 1657347263
),
array(
"id" => 8,
"node" => "system.admin/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 9,
"node" => "system.auth",
"title" => "角色权限管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 10,
"node" => "system.auth/authorize",
"title" => "授权",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 11,
"node" => "system.auth/saveAuthorize",
"title" => "授权保存",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 12,
"node" => "system.auth/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 13,
"node" => "system.auth/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 14,
"node" => "system.auth/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347264,
"update_time" => 1657347264
),
array(
"id" => 15,
"node" => "system.auth/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 16,
"node" => "system.auth/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 17,
"node" => "system.auth/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 18,
"node" => "system.config",
"title" => "系统配置管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 19,
"node" => "system.config/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 20,
"node" => "system.config/save",
"title" => "保存",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 21,
"node" => "system.menu",
"title" => "菜单管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 22,
"node" => "system.menu/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347265,
"update_time" => 1657347265
),
array(
"id" => 23,
"node" => "system.menu/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 24,
"node" => "system.menu/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 25,
"node" => "system.menu/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 26,
"node" => "system.menu/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 27,
"node" => "system.menu/getMenuTips",
"title" => "添加菜单提示",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 28,
"node" => "system.menu/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 29,
"node" => "system.node",
"title" => "系统节点管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 30,
"node" => "system.node/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347266,
"update_time" => 1657347266
),
array(
"id" => 31,
"node" => "system.node/refreshNode",
"title" => "系统节点更新",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 32,
"node" => "system.node/clearNode",
"title" => "清除失效节点",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 33,
"node" => "system.node/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 34,
"node" => "system.node/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 35,
"node" => "system.node/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 36,
"node" => "system.node/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 37,
"node" => "system.node/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347267,
"update_time" => 1657347267
),
array(
"id" => 38,
"node" => "system.uploadfile",
"title" => "上传文件管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 39,
"node" => "system.uploadfile/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 40,
"node" => "system.uploadfile/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 41,
"node" => "system.uploadfile/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 42,
"node" => "system.uploadfile/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 43,
"node" => "system.uploadfile/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 44,
"node" => "system.uploadfile/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 45,
"node" => "mall.cate",
"title" => "商品分类管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347268,
"update_time" => 1657347268
),
array(
"id" => 46,
"node" => "mall.cate/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 47,
"node" => "mall.cate/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 48,
"node" => "mall.cate/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 49,
"node" => "mall.cate/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 50,
"node" => "mall.cate/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 51,
"node" => "mall.cate/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 52,
"node" => "mall.goods",
"title" => "商城商品管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347269,
"update_time" => 1657347269
),
array(
"id" => 53,
"node" => "mall.goods/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 54,
"node" => "mall.goods/stock",
"title" => "入库",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 55,
"node" => "mall.goods/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 56,
"node" => "mall.goods/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 57,
"node" => "mall.goods/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 58,
"node" => "mall.goods/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 59,
"node" => "mall.goods/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 60,
"node" => "system.quick",
"title" => "快捷入口管理",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347270,
"update_time" => 1657347270
),
array(
"id" => 61,
"node" => "system.quick/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 62,
"node" => "system.quick/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 63,
"node" => "system.quick/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 64,
"node" => "system.quick/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 65,
"node" => "system.quick/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 66,
"node" => "system.quick/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 69,
"node" => "debug.log",
"title" => "debug_log",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347271,
"update_time" => 1657347271
),
array(
"id" => 70,
"node" => "debug.log/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 71,
"node" => "debug.log/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 72,
"node" => "debug.log/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 73,
"node" => "debug.log/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 74,
"node" => "debug.log/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 75,
"node" => "debug.log/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347272,
"update_time" => 1657347272
),
array(
"id" => 76,
"node" => "mall.tag",
"title" => "mall_tag",
"type" => 1,
"is_auth" => 1,
"create_time" => 1657347614,
"update_time" => 1657347614
),
array(
"id" => 77,
"node" => "mall.tag/index",
"title" => "列表",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347614,
"update_time" => 1657347614
),
array(
"id" => 78,
"node" => "mall.tag/add",
"title" => "添加",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 79,
"node" => "mall.tag/edit",
"title" => "编辑",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 80,
"node" => "mall.tag/delete",
"title" => "删除",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 81,
"node" => "mall.tag/export",
"title" => "导出",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
),
array(
"id" => 82,
"node" => "mall.tag/modify",
"title" => "属性修改",
"type" => 2,
"is_auth" => 1,
"create_time" => 1657347615,
"update_time" => 1657347615
)
);
return $ul_system_node;

View File

@@ -0,0 +1,61 @@
<?php
$ul_system_quick = array(
array(
"title" => "管理员管理",
"icon" => "fa fa-user",
"href" => "system.admin/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "角色管理",
"icon" => "fa fa-bitbucket-square",
"href" => "system.auth/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "菜单管理",
"icon" => "fa fa-tree",
"href" => "system.menu/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "节点管理",
"icon" => "fa fa-list",
"href" => "system.node/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "配置管理",
"icon" => "fa fa-asterisk",
"href" => "system.config/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "上传管理",
"icon" => "fa fa-arrow-up",
"href" => "system.uploadfile/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "商品分类",
"icon" => "fa fa-calendar-check-o",
"href" => "mall.cate/index",
"sort" => 0,
"status" => 1,
),
array(
"title" => "商品管理",
"icon" => "fa fa-list",
"href" => "mall.goods/index",
"sort" => 0,
"status" => 1,
)
);
return $ul_system_quick;

View File

@@ -0,0 +1,174 @@
<?php
// +----------------------------------------------------------------------
// | EasyAdmin
// +----------------------------------------------------------------------
// | PHP交流群: 763822524
// +----------------------------------------------------------------------
// | 开源协议 https://mit-license.org
// +----------------------------------------------------------------------
// | github开源项目https://github.com/zhongshaofa/EasyAdmin
// +----------------------------------------------------------------------
namespace base\admin\service\node;
use app\admin\service\annotation\ControllerAnnotation;
use app\admin\service\annotation\NodeAnotation;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\Common\Annotations\DocParser;
use think\helper\Str;
/**
* 节点处理类
* Class Node.
*/
class NodeClass
{
/**
* @var string 当前文件夹
*/
protected $basePath;
/**
* @var string 命名空间前缀
*/
protected $baseNamespace;
/**
* 构造方法
* Node constructor.
* @param string $basePath 读取的文件夹
* @param string $baseNamespace 读取的命名空间前缀
*/
public function __construct($basePath, $baseNamespace)
{
$this->basePath = $basePath;
$this->baseNamespace = $baseNamespace;
return $this;
}
/**
* 获取所有节点.
* @return array
* @throws \Doctrine\Common\Annotations\AnnotationException
* @throws \ReflectionException
*/
public function getNodelist()
{
list($nodeList, $controllerList) = [[], $this->getControllerList()];
if (!empty($controllerList)) {
AnnotationRegistry::registerLoader('class_exists');
$parser = new DocParser();
$parser->setIgnoreNotImportedAnnotations(true);
$reader = new AnnotationReader($parser);
foreach ($controllerList as $controllerFormat => $controller) {
// 获取类和方法的注释信息
$reflectionClass = new \ReflectionClass($controller);
$methods = $reflectionClass->getMethods();
$actionList = [];
// 遍历读取所有方法的注释的参数信息
foreach ($methods as $method) {
// 读取NodeAnotation的注解
$nodeAnnotation = $reader->getMethodAnnotation($method, NodeAnotation::class);
if (!empty($nodeAnnotation) && !empty($nodeAnnotation->title)) {
$actionTitle = !empty($nodeAnnotation) && !empty($nodeAnnotation->title) ? $nodeAnnotation->title : null;
$actionAuth = !empty($nodeAnnotation) && !empty($nodeAnnotation->auth) ? $nodeAnnotation->auth : false;
$method_name = $nodeAnnotation->name;
if (empty($method_name)) {
$method_name = $method->name;
}
$actionList[] = [
'node' => $controllerFormat . '/' . $method_name,
'title' => $actionTitle,
'is_auth' => $actionAuth,
'type' => 2,
];
}
}
// 读取挂载到控制器注解中的节点
$nodeAnnotationInController = $reader->getClassAnnotations($reflectionClass);
foreach ($nodeAnnotationInController as $nodeAnnotation) {
if ($nodeAnnotation instanceof NodeAnotation) {
$actionList[] = [
'node' => $controllerFormat . '/' . $nodeAnnotation->name,
'title' => $nodeAnnotation->title,
'is_auth' => $nodeAnnotation->auth,
'type' => 2,
];
}
}
// 方法非空才读取控制器注解
if (!empty($actionList)) {
// 读取Controller的注解
$controllerAnnotation = $reader->getClassAnnotation($reflectionClass, ControllerAnnotation::class);
$controllerTitle = !empty($controllerAnnotation) && !empty($controllerAnnotation->title) ? $controllerAnnotation->title : null;
$controllerAuth = !empty($controllerAnnotation) && !empty($controllerAnnotation->auth) ? $controllerAnnotation->auth : false;
$nodeList[] = [
'node' => $controllerFormat,
'title' => $controllerTitle,
'is_auth' => $controllerAuth,
'type' => 1,
];
$nodeList = array_merge($nodeList, $actionList);
}
}
}
return $nodeList;
}
/**
* 获取所有控制器.
* @return array
*/
public function getControllerList()
{
return $this->readControllerFiles($this->basePath);
}
/**
* 遍历读取控制器文件.
* @param $path
* @return array
*/
protected function readControllerFiles($path)
{
list($list, $temp_list, $dirExplode) = [[], scandir($path), explode($this->basePath, $path)];
$middleDir = isset($dirExplode[1]) && !empty($dirExplode[1]) ? str_replace('/', '\\', substr($dirExplode[1], 1)) . '\\' : '';
foreach ($temp_list as $file) {
// 排除根目录和没有开启注解的模块
if ($file == '..' || $file == '.') {
continue;
}
if (is_dir($path . DIRECTORY_SEPARATOR . $file)) {
// 子文件夹,进行递归
$childFiles = $this->readControllerFiles($path . DIRECTORY_SEPARATOR . $file);
$list = array_merge($childFiles, $list);
} else {
// 判断是不是控制器
$fileExplodeArray = explode('.', $file);
if (count($fileExplodeArray) != 2 || end($fileExplodeArray) != 'php') {
continue;
}
// 根目录下的文件
$className = str_replace('.php', '', $file);
$controllerFormat = str_replace('\\', '.', $middleDir) . Str::snake(lcfirst($className));
$list[$controllerFormat] = "{$this->baseNamespace}\\{$middleDir}" . $className;
}
}
return $list;
}
}