1527 changed files with 251323 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||
# Default ignored files |
|||
/shelf/ |
|||
/workspace.xml |
|||
# Editor-based HTTP Client requests |
|||
/httpRequests/ |
|||
# Datasource local storage ignored files |
|||
/dataSources/ |
|||
/dataSources.local.xml |
|||
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module type="WEB_MODULE" version="4"> |
|||
<component name="NewModuleRootManager"> |
|||
<content url="file://$MODULE_DIR$" /> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
|||
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectModuleManager"> |
|||
<modules> |
|||
<module fileurl="file://$PROJECT_DIR$/.idea/api.cms.ahbmz.com_online.iml" filepath="$PROJECT_DIR$/.idea/api.cms.ahbmz.com_online.iml" /> |
|||
</modules> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="VcsDirectoryMappings"> |
|||
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,32 @@ |
|||
|
|||
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 |
|||
版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) |
|||
All rights reserved。 |
|||
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 |
|||
|
|||
Apache Licence是著名的非盈利开源组织Apache采用的协议。 |
|||
该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, |
|||
允许代码修改,再作为开源或商业软件发布。需要满足 |
|||
的条件: |
|||
1. 需要给代码的用户一份Apache Licence ; |
|||
2. 如果你修改了代码,需要在被修改的文件中说明; |
|||
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 |
|||
带有原来代码中的协议,商标,专利声明和其他原来作者规 |
|||
定需要包含的说明; |
|||
4. 如果再发布的产品中包含一个Notice文件,则在Notice文 |
|||
件中需要带有本协议内容。你可以在Notice中增加自己的 |
|||
许可,但不可以表现为对Apache Licence构成更改。 |
|||
具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
|||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
|||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
|||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
|||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|||
POSSIBILITY OF SUCH DAMAGE. |
|||
@ -0,0 +1,52 @@ |
|||
ThinkPHP 6.0 |
|||
=============== |
|||
|
|||
> 运行环境要求PHP7.1+。 |
|||
|
|||
## 主要新特性 |
|||
|
|||
* 采用`PHP7`强类型(严格模式) |
|||
* 支持更多的`PSR`规范 |
|||
* 原生多应用支持 |
|||
* 更强大和易用的查询 |
|||
* 全新的事件系统 |
|||
* 模型事件和数据库事件统一纳入事件系统 |
|||
* 模板引擎分离出核心 |
|||
* 内部功能中间件化 |
|||
* SESSION/Cookie机制改进 |
|||
* 对Swoole以及协程支持改进 |
|||
* 对IDE更加友好 |
|||
* 统一和精简大量用法 |
|||
|
|||
## 安装 |
|||
|
|||
~~~ |
|||
composer create-project topthink/think tp 6.0.* |
|||
~~~ |
|||
|
|||
如果需要更新框架使用 |
|||
~~~ |
|||
composer update topthink/framework |
|||
~~~ |
|||
|
|||
## 文档 |
|||
|
|||
[完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/content) |
|||
|
|||
## 参与开发 |
|||
|
|||
请参阅 [ThinkPHP 核心框架包](https://github.com/top-think/framework)。 |
|||
|
|||
## 版权信息 |
|||
|
|||
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 |
|||
|
|||
本项目包含的第三方源码和二进制文件之版权信息另行标注。 |
|||
|
|||
版权所有Copyright © 2006-2020 by ThinkPHP (http://thinkphp.cn) |
|||
|
|||
All rights reserved。 |
|||
|
|||
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 |
|||
|
|||
更多细节参阅 [LICENSE.txt](LICENSE.txt) |
|||
@ -0,0 +1 @@ |
|||
deny from all |
|||
@ -0,0 +1,22 @@ |
|||
<?php |
|||
declare (strict_types = 1); |
|||
|
|||
namespace app; |
|||
|
|||
use think\Service; |
|||
|
|||
/** |
|||
* 应用服务类 |
|||
*/ |
|||
class AppService extends Service |
|||
{ |
|||
public function register() |
|||
{ |
|||
// 服务注册 |
|||
} |
|||
|
|||
public function boot() |
|||
{ |
|||
// 服务启动 |
|||
} |
|||
} |
|||
@ -0,0 +1,94 @@ |
|||
<?php |
|||
declare (strict_types = 1); |
|||
|
|||
namespace app; |
|||
|
|||
use think\App; |
|||
use think\exception\ValidateException; |
|||
use think\Validate; |
|||
|
|||
/** |
|||
* 控制器基础类 |
|||
*/ |
|||
abstract class BaseController |
|||
{ |
|||
/** |
|||
* Request实例 |
|||
* @var \think\Request |
|||
*/ |
|||
protected $request; |
|||
|
|||
/** |
|||
* 应用实例 |
|||
* @var \think\App |
|||
*/ |
|||
protected $app; |
|||
|
|||
/** |
|||
* 是否批量验证 |
|||
* @var bool |
|||
*/ |
|||
protected $batchValidate = false; |
|||
|
|||
/** |
|||
* 控制器中间件 |
|||
* @var array |
|||
*/ |
|||
protected $middleware = []; |
|||
|
|||
/** |
|||
* 构造方法 |
|||
* @access public |
|||
* @param App $app 应用对象 |
|||
*/ |
|||
public function __construct(App $app) |
|||
{ |
|||
$this->app = $app; |
|||
$this->request = $this->app->request; |
|||
|
|||
// 控制器初始化 |
|||
$this->initialize(); |
|||
} |
|||
|
|||
// 初始化 |
|||
protected function initialize() |
|||
{} |
|||
|
|||
/** |
|||
* 验证数据 |
|||
* @access protected |
|||
* @param array $data 数据 |
|||
* @param string|array $validate 验证器名或者验证规则数组 |
|||
* @param array $message 提示信息 |
|||
* @param bool $batch 是否批量验证 |
|||
* @return array|string|true |
|||
* @throws ValidateException |
|||
*/ |
|||
protected function validate(array $data, $validate, array $message = [], bool $batch = false) |
|||
{ |
|||
if (is_array($validate)) { |
|||
$v = new Validate(); |
|||
$v->rule($validate); |
|||
} else { |
|||
if (strpos($validate, '.')) { |
|||
// 支持场景 |
|||
[$validate, $scene] = explode('.', $validate); |
|||
} |
|||
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate); |
|||
$v = new $class(); |
|||
if (!empty($scene)) { |
|||
$v->scene($scene); |
|||
} |
|||
} |
|||
|
|||
$v->message($message); |
|||
|
|||
// 是否批量验证 |
|||
if ($batch || $this->batchValidate) { |
|||
$v->batch(true); |
|||
} |
|||
|
|||
return $v->failException(true)->check($data); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,58 @@ |
|||
<?php |
|||
namespace app; |
|||
|
|||
use think\db\exception\DataNotFoundException; |
|||
use think\db\exception\ModelNotFoundException; |
|||
use think\exception\Handle; |
|||
use think\exception\HttpException; |
|||
use think\exception\HttpResponseException; |
|||
use think\exception\ValidateException; |
|||
use think\Response; |
|||
use Throwable; |
|||
|
|||
/** |
|||
* 应用异常处理类 |
|||
*/ |
|||
class ExceptionHandle extends Handle |
|||
{ |
|||
/** |
|||
* 不需要记录信息(日志)的异常类列表 |
|||
* @var array |
|||
*/ |
|||
protected $ignoreReport = [ |
|||
HttpException::class, |
|||
HttpResponseException::class, |
|||
ModelNotFoundException::class, |
|||
DataNotFoundException::class, |
|||
ValidateException::class, |
|||
]; |
|||
|
|||
/** |
|||
* 记录异常信息(包括日志或者其它方式记录) |
|||
* |
|||
* @access public |
|||
* @param Throwable $exception |
|||
* @return void |
|||
*/ |
|||
public function report(Throwable $exception): void |
|||
{ |
|||
// 使用内置的方式记录异常日志 |
|||
parent::report($exception); |
|||
} |
|||
|
|||
/** |
|||
* Render an exception into an HTTP response. |
|||
* |
|||
* @access public |
|||
* @param \think\Request $request |
|||
* @param Throwable $e |
|||
* @return Response |
|||
*/ |
|||
public function render($request, Throwable $e): Response |
|||
{ |
|||
// 添加自定义异常处理机制 |
|||
|
|||
// 其他错误交给系统处理 |
|||
return parent::render($request, $e); |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
<?php |
|||
|
|||
namespace app; |
|||
|
|||
// 应用请求对象类 |
|||
class Request extends \think\Request |
|||
{ |
|||
//全局请求过滤 |
|||
protected $filter = ['htmlspecialchars', 'trim', 'strip_tags']; |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Api统一配置文件 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// 应用地址 |
|||
'page' => 1, |
|||
'limit' => 10, |
|||
]; |
|||
|
|||
@ -0,0 +1,23 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | JWT签名专用配置文件 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// JWT-TOKEN验证应用地址 |
|||
'web' => [ |
|||
'host' => 'base.ahbmz.com', |
|||
'expire_time' => '+1200 minute', //分钟 DateTimeImmutable |
|||
'expire_at' => 72000, //秒 //对应expire_time |
|||
'token_key' => 'K4Eya8bEbxmjzxcplUo8u3d', |
|||
'jti_nonce' => 'lwEinge4Ey8ExjxpU83klKlfeiao8L', //jwt jti |
|||
'expire_time_refresh' => 3600 * 24 * 7, //7天过期 |
|||
], |
|||
//不需要jwt的控制器、方法直接返回 |
|||
'filter_router' => [ |
|||
'api/login/login', |
|||
'api/login/refreshtoken', |
|||
'api/login/captcha', |
|||
'api/UploadLog/add', |
|||
] |
|||
]; |
|||
@ -0,0 +1,205 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 行为日志类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
class Ad extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Ad(); |
|||
} |
|||
|
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Block::class)->scene('lists')->check($_get); |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* 获取广告位类型 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function getAdType(){ |
|||
//获取栏目类型 |
|||
$_ad_type = config('dictionary.sqlfields.ad_type'); |
|||
//返回数据 |
|||
return send_http_status($_ad_type); |
|||
} |
|||
|
|||
/** |
|||
* 添加数据 |
|||
* @return \think\Response |
|||
* @Log [sys_name] 在 [sys_time] 创建了广告位:[name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Ad::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
|
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取单条数据 |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function read($id = '') |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Block::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* 保存更新的资源 |
|||
* @param \think\Request $request |
|||
* @param int $id |
|||
* @return \think\Response |
|||
* @Log [sys_name]在[sys_time]修改了广告位[id]的数据 |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Ad::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* @Log [sys_name] 在 [sys_time] 删除了广告位id:[id] |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->get('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,10'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* 显示广告列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function data() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Block::class)->scene('lists')->check($_get); |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->AdData(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function dataAdd(){ |
|||
$this->model = new \app\api\model\AdData(); |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\AdData::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
|
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
public function dataEdit($id = 0){ |
|||
$this->model = new \app\api\model\AdData(); |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\AdData::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
public function dataRead($id=0){ |
|||
$this->model = new \app\api\model\AdData(); |
|||
//验证参数 |
|||
validate(\app\api\validate\AdData::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* @Log [sys_name] 在 [sys_time] 删除了广告id:[id] |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function dataDelete() |
|||
{ |
|||
$this->model = new \app\api\model\AdData(); |
|||
//接收参数 |
|||
$ids = $this->request->get('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,10'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,118 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 行为日志类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
class Block extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Block(); |
|||
} |
|||
|
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Block::class)->scene('lists')->check($_get); |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* 添加数据 |
|||
* @return \think\Response |
|||
* @Log [sys_name] 在 [sys_time] 创建了管理员:[ident] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Block::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
|
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取单条数据 |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function read($id = '') |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Block::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* 保存更新的资源 |
|||
* @param \think\Request $request |
|||
* @param int $id |
|||
* @return \think\Response |
|||
* @Log [sys_name]在[sys_time]修改了碎片标志[ident]的数据 |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Block::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* @Log [sys_name] 在 [sys_time] 删除了碎片id:[id] |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->post('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,10'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,135 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 行为日志类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
class Column extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Column(); |
|||
} |
|||
|
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data, 200); |
|||
} |
|||
|
|||
/** |
|||
* 添加数据 |
|||
* @return \think\Response |
|||
* @Log [sys_name] 在 [sys_time] 创建了栏目:[name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->check($_post); |
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取单条数据 |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function read($id = '') |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* 保存更新的资源 |
|||
* @param \think\Request $request |
|||
* @param int $id |
|||
* @return \think\Response |
|||
* @Log [sys_name]在[sys_time]修改了管理员账号[name]的数据 |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* @Log [sys_name] 在 [sys_time] 删除了栏目名称:[name] |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->post('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,100'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* 修改数据状态 |
|||
* @param int $id |
|||
* @return \think\Response |
|||
* @Log [sys_name] 在 [sys_time] 设置ID为[id]管理员账号为:[dictionary_status] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
} |
|||
@ -0,0 +1,117 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use app\BaseController; |
|||
use auth\PermissAuth; |
|||
use think\facade\Request; |
|||
use think\facade\Validate; |
|||
|
|||
/** |
|||
* @OA\OpenApi( |
|||
* @OA\Server( |
|||
* url="base.ahbmz.com", |
|||
* description="API server" |
|||
* ), |
|||
* @OA\Info( |
|||
* version="1.0.0", |
|||
* title="这是我的swagger文档第一个Api", |
|||
* description="用户Api接口", |
|||
* termsOfService="http://swagger.io/terms/", |
|||
* @OA\Contact( |
|||
* name="安徽云掌技术支持", |
|||
* email="txg@huamill.com", |
|||
* url="http://www.ahbmz.com" |
|||
* ), |
|||
* @OA\License(name="BMZMIT") |
|||
* ) |
|||
* ) |
|||
*/ |
|||
class Common extends BaseController |
|||
{ |
|||
protected $action_url = ''; // 请求URL api/manager/index |
|||
|
|||
public function initialize() |
|||
{ |
|||
//获取请求路径 |
|||
$this->action_url = $this->getBaseActionUrl(); |
|||
|
|||
//是否跳过token、权限验证 |
|||
if (!$this->filterJwtAuth()) { |
|||
/** |
|||
* JWT Token检测 |
|||
*/ |
|||
if ((!defined('UID') || !defined('SITE_ID'))) { |
|||
return send_http_status('', 40512); |
|||
} |
|||
|
|||
/** |
|||
* 定义当前类的实例化[操作日志类使用] |
|||
*/ |
|||
defined('CURR_THIS') ?: define('CURR_THIS', get_called_class()); |
|||
|
|||
/** |
|||
* 检测用户权限 |
|||
*/ |
|||
env('app_debug') ?: $this->checkPermissAuth(); // $this->checkPermissAuth(); |
|||
} |
|||
/** |
|||
* 自定义全局验证器 |
|||
*/ |
|||
$this->uniqueSite(); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* 自定义全局验证器,检测同站点下数据是否重复 |
|||
*/ |
|||
private function uniqueSite() |
|||
{ |
|||
Validate::maker(function ($validate) { |
|||
$validate->extend('uniqueSite', 'extra_unique_validate'); |
|||
}); |
|||
} |
|||
|
|||
/** |
|||
* 检测用户权限 |
|||
*/ |
|||
private function checkPermissAuth() |
|||
{ |
|||
$url = str_replace(['//', '\\', '/'], '', $this->request->root()); |
|||
$url .= '/' . $this->request->controller(); |
|||
$url .= '/' . $this->request->action(); |
|||
if (!(PermissAuth::getInstance())->check($url, UID)) { |
|||
return send_http_status('', 403); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* jwt 过滤请求地址,如果返回 true 说明不需要验证 |
|||
* @return bool |
|||
*/ |
|||
private function filterJwtAuth() |
|||
{ |
|||
$filter_router = config('jwtauth.filter_router'); |
|||
if (empty($filter_router)) { |
|||
return false; |
|||
} |
|||
if (in_array($this->action_url, array_map('strtolower', $filter_router))) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* 获取请求路径 模块名/控制器名/方法名 |
|||
* @return string |
|||
*/ |
|||
private function getBaseActionUrl() |
|||
{ |
|||
$url = str_replace(['//', '\\', '/'], '', $this->request->root()); |
|||
$url .= '/' . $this->request->controller(); |
|||
$url .= '/' . $this->request->action(); |
|||
return strtolower($url); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,90 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 全局配置 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
class Config extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Config(); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="config/index",tags={"系统配置"},summary="获取系统配置",description="获取系统配置", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="name",in="query",description="配置名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="type",in="query",description="配置标识",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="value",in="query",description="配置值",@OA\Schema (type="string")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回所有配置信息", |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->param(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Config::class)->scene('lists')->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['name', 'type', 'value']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="config/save",tags={"系统配置"},summary="系统配置",description="系统配置", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* @OA\Property(property="name",type="string",description="此那么可自行定义 比如 seo_title"), |
|||
* @OA\Property(property="value",type="string",description="此那么可自行定义 比如 合肥网站优化"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录总数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 更新了配置信息 |
|||
*/ |
|||
public function save() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->edit($_post); |
|||
return send_http_status($insertId, $insertId ? 209 : 210); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,242 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 统一参考类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
/** |
|||
* Demo类添加、修改等公共请求参数 |
|||
* @OA\Schema ( |
|||
* schema = "DemoField", |
|||
* required={"id","username","password","sex","phone"}, |
|||
* @OA\Property(property="username",type="string",minLength=2,maxLength=20,mock={"mock":"@uname"},default="Jessica Smitch",description="管理员名称"), |
|||
* @OA\Property(property="truename",type="string",minLength=2,maxLength=20,mock={"mock":"@uname"},default="jack ",description="管理员真实姓名"), |
|||
* @OA\Property(property="password",type="string",minLength=6,maxLength=20,mock={"mock":"@string"},default="",description="管理员密码"), |
|||
* @OA\Property(property="phone",type="integer",format="int15",minLength=11,maxLength=11,default="",description="手机号"), |
|||
* @OA\Property(property="email",type="string",minLength=5,maxLength=50,mock={"mock":"@email"},default="",description="管理员邮箱"), |
|||
* @OA\Property(property="birthday",type="string",default="2017-02-02 18:31:45",format="datetime",description="管理员生日"), |
|||
* @OA\Property(property="age",type="integer",format="int32",default="1",minimum=1,exclusiveMinimum=true,maximum=150,exclusiveMaximum=true,minLength=1,maxLength=3,description="年龄"), |
|||
* ), |
|||
*/ |
|||
class Demo extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Demo(); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="demo/index",tags={"测试案例"},summary="获取DEMO列表",description="根据相关参数获取DEMO列表", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="username",in="query",description="用户名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="sex",in="query",description="用户年龄",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回DEMo用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/DemoMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Demo::class)->scene('lists')->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['username', 'phone:OR', 'sex:OR', 'truename']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="demo/read/{id}",tags={"测试案例"},summary="获取DEMO详情",description="根据ID查询DEMO信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="id",in="path",required=true,description="ID",@OA\Schema (type="integer",format="int32")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回DEMO单条用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/DemoMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function read(int $id = 0) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Demo::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/add",tags={"测试案例"},summary="添加DEMO数据",description="添加后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了测试:[username] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Demo::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/edit/id/{id}",tags={"测试案例"},summary="修改DEMO数据",description="修改后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time]修改了测试账号[username]的数据 |
|||
*/ |
|||
public function edit(int $id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = empty($_post['id']) ? $id : 0; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Demo::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/delete",tags={"测试案例"},summary="删除DEMO数据",description="根据ID删除DEMO信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了测试账号:[username] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->post('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/status",tags={"测试案例"},summary="更新DEMO状态",description="根据ID及status更新DEMO状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 设置ID为[id]测试账号为:[dictionary_status] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,203 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 字典类型类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
|
|||
class Dictionary extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Dictionary(); |
|||
} |
|||
|
|||
|
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Dictionary::class)->scene('lists')->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['dict_name','dict_value:OR']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function read(int $id = 0) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Dictionary::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/add",tags={"测试案例"},summary="添加DEMO数据",description="添加后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了字典类型:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Dictionary::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/edit/id/{id}",tags={"测试案例"},summary="修改DEMO数据",description="修改后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time]修改了字典[dict_symbol]的数据 |
|||
*/ |
|||
public function edit(int $id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = empty($_post['id']) ? $id : 0; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Dictionary::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/delete",tags={"测试案例"},summary="删除DEMO数据",description="根据ID删除DEMO信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了字典:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/status",tags={"测试案例"},summary="更新DEMO状态",description="根据ID及status更新DEMO状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 设置ID为[id]测试账号为:[dictionary_status] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,207 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 字典类型类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
|
|||
class DictionaryType extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\DictionaryType(); |
|||
} |
|||
|
|||
|
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\DictionaryType::class)->scene('lists')->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
// $this->model->search_arr = ['username', 'phone:OR', 'sex:OR', 'truename']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
$this->model->exportDictToConfig(); |
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function test(){ |
|||
|
|||
} |
|||
|
|||
public function read(int $id = 0) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\DictionaryType::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/add",tags={"测试案例"},summary="添加DEMO数据",description="添加后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了字典类型:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
//验证参数 |
|||
validate(\app\api\validate\DictionaryType::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
|
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/edit/id/{id}",tags={"测试案例"},summary="修改DEMO数据",description="修改后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time]修改了字典[dict_symbol]的数据 |
|||
*/ |
|||
public function edit(int $id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = empty($_post['id']) ? $id : 0; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\DictionaryType::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/delete",tags={"测试案例"},summary="删除DEMO数据",description="根据ID删除DEMO信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了字典:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/status",tags={"测试案例"},summary="更新DEMO状态",description="根据ID及status更新DEMO状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 设置ID为[id]测试账号为:[dictionary_status] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,395 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 角色权限类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use auth\PermissAuth; |
|||
use think\App; |
|||
|
|||
/** |
|||
* Manager类添加、修改等公共请求参数 |
|||
* @OA\Schema ( |
|||
* schema = "GroupField", |
|||
* required={"id","username","password","sex","phone"}, |
|||
* @OA\Property(property="title",type="string",minLength=1,maxLength=100,mock={"mock":"@cname"},default="商务部",description="用户组中文名称"), |
|||
* @OA\Property(property="role_code",type="string",minLength=1,maxLength=100,mock={"mock":"@name"},default="bussiness ",description="角色标识"), |
|||
* @OA\Property(property="remark",type="string",minLength=1,maxLength=100,mock={"mock":"@string"},default="",description="备注"), |
|||
* ), |
|||
*/ |
|||
class Group extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
|
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="group/index",tags={"角色管理"},summary="获取角色管理",description="根据相关参数获取角色管理", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="title",in="query",description="角色名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="role_code",in="query",description="角色标识",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/GroupMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Group::class)->scene('lists')->check($_get); |
|||
|
|||
$_data = (PermissAuth::getInstance())->getGroups(); |
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="group/getGroupRule",tags={"角色管理"},summary="查询角色权限",description="查询角色所有的权限菜单,并进行标记checked", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="role_id",in="path",required=true,description="角色ID",@OA\Schema (type="integer",format="int32")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/MenuMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function getGroupRule() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->param('role_id', 0, 'int'); |
|||
// //验证参数 |
|||
// validate(\app\api\validate\Group::class)->scene('lists')->check($_get); |
|||
|
|||
$_data = (PermissAuth::getInstance())->getGroupRule($_get); |
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
|
|||
public function getUserGroups() |
|||
{ |
|||
$_data = (PermissAuth::getInstance())->getUserGroups(UID); |
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="group/add",tags={"角色管理"},summary="添加角色数据",description="添加后台角色数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/GroupField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录总数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了用户角色:[title] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Group::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = (PermissAuth::getInstance())->addGroup($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="group/addGroupRule/role_id/{role_id}",tags={"角色管理"},summary="添加角色权限",description="添加后台角色权限", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"menu_id"}, |
|||
* @OA\Property(property="menu_id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录总数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @param int $role_id |
|||
* @Log [sys_name] 在 [sys_time] 编辑了用户角色:[title]的权限菜单: |
|||
*/ |
|||
public function addGroupRule($role_id = 0) |
|||
{ |
|||
//接收参数 |
|||
$menu_id = $this->request->param('menu_id', '', 'string'); |
|||
$menu_id = implode(',', $menu_id); |
|||
//验证参数 |
|||
$_rules = [ |
|||
'role_id|用户角色ID' => 'require|length:1,100', |
|||
'menu_id|菜单id' => 'require|length:1,10000', |
|||
]; |
|||
validate($_rules)->check(['role_id' => $role_id, 'menu_id' => $menu_id]); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = (PermissAuth::getInstance())->addGroupRule((int)$role_id, $menu_id); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @param int $id 角色ID |
|||
*/ |
|||
public function readRule($id = '') |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Demo::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//处理数据 |
|||
$_data = (PermissAuth::getInstance())->getGroupRule((int)$id); |
|||
if (!empty($_data)) { |
|||
$_data = get_tree($_data); |
|||
} |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="group/edit/id/{id}",tags={"角色管理"},summary="修改角色数据",description="修改角色数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/GroupField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time]修改了用户角色:[title] |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post['title'] = $this->request->post('title', ''); |
|||
$_post['role_code'] = $this->request->post('role_code', ''); |
|||
$_post['remark'] = $this->request->post('remark', ''); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Group::class)->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', (PermissAuth::getInstance())->editGroup($_post) ? 203 : 204); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="group/status",tags={"角色管理"},summary="更新角色状态",description="根据ID及status更新角色状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] [dictionary_status]了用户角色:[title] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status', 1, 'int'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', PermissAuth::getInstance()->statusGroup($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="group/delete",tags={"角色管理"},summary="删除角色数据",description="根据ID删除角色数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了用户角色:[title] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->post('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,100'])->check(['ids' => $ids]); |
|||
|
|||
$affected = (PermissAuth::getInstance())->deleteGroup($ids); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $affected ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="GroupMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="site_id", |
|||
* type="integer", |
|||
* description="站点ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="remark", |
|||
* type="string", |
|||
* description="备注", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="title", |
|||
* type="string", |
|||
* description="用户组中文名称" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="role_code", |
|||
* type="string", |
|||
* description="角色标识" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="status", |
|||
* type="integer", |
|||
* description="状态:为1正常,为0禁用" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="rules", |
|||
* type="string", |
|||
* description="用户组拥有的规则id, 多个规则","隔开" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="type", |
|||
* type="integer", |
|||
* description="组的类型 1:共用 2:个人" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="delete_time", |
|||
* type="integer", |
|||
* description="是否删除 null:未删除" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="update_time", |
|||
* type="integer", |
|||
* description="更新时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="create_time", |
|||
* type="integer", |
|||
* description="创建时间" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
} |
|||
@ -0,0 +1,85 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 字典类型类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
|
|||
class ImageStorage extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\ImageStorages(); |
|||
} |
|||
|
|||
|
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['title']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function read(int $id = 0) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Message::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
|
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
public function edit(int $id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = empty($_post['id']) ? $id : 0; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\facade\Console; |
|||
use think\Request; |
|||
use OpenApi\Serializer; |
|||
|
|||
class Index extends Common |
|||
{ |
|||
|
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
exit; |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,55 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
/** |
|||
* 系统日志 |
|||
* @package app\api\controller |
|||
*/ |
|||
class Log extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Log(); |
|||
} |
|||
/** |
|||
* @OA\Get ( |
|||
* path="log/index",tags={"日志管理"},summary="获取日志列表",description="根据相关参数获取日志列表", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="username",in="query",description="管理员名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="model",in="query",description="操作模块",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/LogMsgExport"), |
|||
* ), |
|||
* ), |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Log::class)->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['username','model']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,169 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use app\api\model\Manager; |
|||
use app\api\model\Token; |
|||
use auth\JwtAuth; |
|||
use edward\captcha\facade\CaptchaApi; |
|||
use service\ActionLog; |
|||
|
|||
class Login |
|||
{ |
|||
/** |
|||
* @OA\Post ( |
|||
* path="login/login",tags={"公共分类"},summary="用户登录",description="用户登录", |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"username","password","key","code"}, |
|||
* @OA\Property(property="username",type="string",minLength=2,maxLength=20,description="登录账号"), |
|||
* @OA\Property(property="password",type="string",minLength=6,maxLength=20,description="登录密码"), |
|||
* @OA\Property(property="key",type="string",minLength=1,maxLength=100,description="验证码安全标识 验证码接口返回"), |
|||
* @OA\Property(property="code",type="integer",minLength=1,maxLength=6,format="int15",description="验证码"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息,token信息、管理员信息", |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 登录了后台 |
|||
*/ |
|||
public function login(Manager $manager) |
|||
{ |
|||
//获取参数 |
|||
$_post = \request()->param(); |
|||
|
|||
//验证参数 |
|||
$_rule = [ |
|||
'username|登录用户名' => 'require|length:4,20', |
|||
'password|登录密码' => 'require|length:6,20', |
|||
'key|验证码' => 'require|length:6,200', |
|||
'code|验证码' => 'require|length:1,6', |
|||
]; |
|||
|
|||
$_message = [ |
|||
'username.length' => '请输入4到20位的用户名!!!', |
|||
'password.length' => '请输入6到20位的密码!!!', |
|||
'code.length' => '请输入1到6位的验证码!!!', |
|||
'key.length' => '验证码不正确!!!', |
|||
]; |
|||
|
|||
env('app_debug') ?: validate($_rule, $_message)->check($_post); |
|||
|
|||
//验证码检测 |
|||
env('app_debug') ?: $this->checkCaptcha($_post['code'], $_post['key']); |
|||
|
|||
//验证用户信息 |
|||
$user_data = $manager->checkLogin($_post); |
|||
|
|||
//发送JWT签证密钥 |
|||
$token_obj = (JwtAuth::getInstance())->setToken($user_data); |
|||
|
|||
//写入登录日志 |
|||
defined('CURR_THIS') ?: define('CURR_THIS', get_called_class()); |
|||
$user_data['user_id'] = $user_data['id']; |
|||
ActionLog::getInstance()->write($user_data); |
|||
|
|||
//获取未读系统邮件 |
|||
$message = new \app\api\model\Message(); |
|||
$message->setUserMessage($user_data['user_id'],$user_data['site_id']); |
|||
|
|||
//返回数据 |
|||
$data = [ |
|||
'access_token' => [ |
|||
'token' => $token_obj->getToken(), |
|||
'expire' => config('jwtauth.web.expire_at'), |
|||
// 'refresh_token' => $token_obj->createRefreshToken(new Token()), |
|||
], |
|||
'userinfo' => $user_data, |
|||
]; |
|||
return send_http_status($data); |
|||
} |
|||
|
|||
/** |
|||
* 通过refresh_token重新生成token |
|||
*/ |
|||
public function refreshToken(Token $token) |
|||
{ |
|||
$refresh_token = request()->param('refresh_token'); |
|||
$_data = $token->refreshToken($refresh_token); |
|||
if (!empty($_data)) { |
|||
return send_http_status($_data); |
|||
} |
|||
return send_http_status('', 40509, 406); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="login/captcha",tags={"公共分类"},summary="获取验证码",description="获取验证码", |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回验证码信息", |
|||
* @OA\JsonContent( |
|||
* @OA\Schema( |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="base64", |
|||
* type="string", |
|||
* description="base64图片" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="key", |
|||
* type="string", |
|||
* description="验证码安全标识" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="md5", |
|||
* type="string", |
|||
* description="验证码md5值" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* 前后端分离验证码生成 |
|||
*/ |
|||
public function captcha() |
|||
{ |
|||
$_data = CaptchaApi::create(); |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* 前后端分离验证码检测 |
|||
* @param string $code |
|||
* @param string $key |
|||
*/ |
|||
public function checkCaptcha(string $code = '', string $key = '') |
|||
{ |
|||
return CaptchaApi::check($code, $key) ?: send_http_status('', 40506); |
|||
} |
|||
} |
|||
@ -0,0 +1,439 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 管理员类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use auth\PermissAuth; |
|||
use think\App; |
|||
|
|||
/** |
|||
* Manager类添加、修改等公共请求参数 |
|||
* @OA\Schema ( |
|||
* schema = "ManagerField", |
|||
* required={"username","password","sex","phone"}, |
|||
* @OA\Property(property="username",type="string",minLength=2,maxLength=20,mock={"mock":"@word"},default="Jessica Smitch",description="管理员名称"), |
|||
* @OA\Property(property="truename",type="string",minLength=2,maxLength=20,mock={"mock":"@cname"},default="jack ",description="管理员真实姓名"), |
|||
* @OA\Property(property="password",type="string",minLength=6,maxLength=20,mock={"mock":"@string"},default="",description="管理员密码"), |
|||
* @OA\Property(property="sex",type="integer",format="int15",minLength=1,maxLength=1,default="0",description="性别"), |
|||
* @OA\Property(property="phone",type="integer",format="int15",minLength=11,maxLength=11,default="",description="手机号"), |
|||
* @OA\Property(property="email",type="string",minLength=5,maxLength=50,mock={"mock":"@email"},default="",description="管理员邮箱"), |
|||
* @OA\Property(property="status",type="integer",format="int15",minLength=1,maxLength=1,default="1",description="状态"), |
|||
* @OA\Property(property="introduction",type="string",minLength=1,maxLength=200,mock={"mock":"@cparagraph"},default=" ",description="管理员简介"), |
|||
* ), |
|||
*/ |
|||
class Manager extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Manager(); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="manager/index",tags={"用户管理"},summary="获取用户列表",description="根据相关参数获取用户列表", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="username",in="query",description="管理员名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="truename",in="query",description="真实姓名",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="phone",in="query",description="手机号",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="sex",in="query",description="性别",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/ManagerMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('lists')->check($_get); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['username', 'phone', 'sex', 'truename']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="manager/read/id/{id}",tags={"用户管理"},summary="获取用户详情",description="根据ID查询用户信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="id",in="path",required=true,description="ID",@OA\Schema (type="integer",format="int32")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/ManagerMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function read(int $id = UID) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="manager/readPersional",tags={"用户管理"},summary="获取个人详情",description="获取当前登录用户的个人资料", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回当前登录用户的数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/ManagerMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function readPersional() |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('read')->check(['id' => UID]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead(UID)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="manager/permissMenu",tags={"用户管理"},summary="获取用户权限",description="根据当前登录用户UID获取当前用户权限菜单", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员权限菜单数据", |
|||
* @OA\JsonContent(ref="#/components/schemas/MenuMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function permissMenu() |
|||
{ |
|||
$_data = PermissAuth::getInstance()->getAuthList(UID, 1, true); |
|||
|
|||
//用户权限 |
|||
$_data = get_tree($_data, 0, 'children'); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="manager/add",tags={"用户管理"},summary="添加管理员数据",description="添加后台管理员数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/ManagerField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录总数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了管理员:[username] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="manager/edit/id/{id}",tags={"用户管理"},summary="修改用户数据",description="修改管理员数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/ManagerField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time] 修改了管理员账号[username]的数据 |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->param(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="manager/editPersional",tags={"用户管理"},summary="修改个人数据",description="修改自己的个人资料", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/ManagerField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time] 修改了管理员账号[username]的数据 |
|||
*/ |
|||
public function editPersional() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->param(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, UID) ? 203 : 204); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="manager/passwordEdit",tags={"用户管理"},summary="重置用户密码",description="根据ID重置用户密码", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","password","old_password","username"}, |
|||
* @OA\Property(property="id",type="integer",format="int15",description="用户ID"), |
|||
* @OA\Property(property="password",type="string",minLength=6,maxLength=20,description="新密码"), |
|||
* @OA\Property(property="old_password",type="string",minLength=6,maxLength=20,description="原始密码"), |
|||
* @OA\Property(property="username",type="string",minLength=2,maxLength=20,description="管理员账号"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time] 修改了账号密码 |
|||
*/ |
|||
public function passwordEdit() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->param(); |
|||
$_post['id'] = UID; |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('UpdatePassword')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, UID) ? 203 : 204); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="manager/passwordReset",tags={"用户管理"},summary="重置用户密码",description="根据ID重置用户密码", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","password","username"}, |
|||
* @OA\Property(property="id",type="integer",format="int15",description="用户ID"), |
|||
* @OA\Property(property="password",type="string",minLength=6,maxLength=20,description="管理员密码"), |
|||
* @OA\Property(property="username",type="string",minLength=2,maxLength=20,description="管理员账号"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time] 重置了[username]的账号密码为:[password] |
|||
*/ |
|||
public function passwordReset() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->only(['id', 'password', 'username']); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Manager::class)->scene('ResetPassword')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $_post['id']) ? 203 : 204); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="manager/delete",tags={"用户管理"},summary="删除用户数据",description="根据ID删除用户数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了管理员账号:[username] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->post('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,100'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="manager/status",tags={"用户管理"},summary="更新用户状态",description="根据ID及status更新用户状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] [dictionary_status]了管理员:[username], 管理员ID为:[id] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
|
|||
public function getMessage(){ |
|||
$type = $this->request->param('type','98'); |
|||
|
|||
$model = new \app\api\model\Message(); |
|||
$_data = $model->getUserMessage($type); |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function messageStatus() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$type = $this->request->param('type'); |
|||
$model = new \app\api\model\Message(); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('',$model->setMessageRead($ids,$type) !== false ? 207 : 208); |
|||
} |
|||
|
|||
public function messageDelete(){ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$model = new \app\api\model\Message(); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('',$model->setMessageDelete($ids) ? 205 : 206); |
|||
} |
|||
|
|||
|
|||
public function setMessage(){ |
|||
|
|||
//获取未读系统邮件 |
|||
$message = new \app\api\model\Message(); |
|||
$message->setUserMessage(); |
|||
|
|||
return send_http_status('', 200); |
|||
|
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,256 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 获取权限菜单 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use auth\PermissAuth; |
|||
use think\App; |
|||
|
|||
/** |
|||
* Menu类添加、修改等公共请求参数 |
|||
* @OA\Schema ( |
|||
* schema = "MenuField", |
|||
* required={"id","name","model_name"}, |
|||
* @OA\Property(property="name",type="string",minLength=1,maxLength=30,mock={"mock":"@cname"},default="栏目菜单",description="权限菜单名称"), |
|||
* @OA\Property(property="parent_id",type="integer",format="int15",minLength=1,maxLength=100,default="0",description="父级ID"), |
|||
* @OA\Property(property="model_name",type="string",minLength=2,maxLength=20,mock={"mock":"@word"},default="/api/menu/index ",description="模块名/控制器/方法"), |
|||
* @OA\Property(property="path",type="string",default="/system/menu",description="权限菜单前端路由"), |
|||
* @OA\Property(property="component",type="string",default="/system/menu",description="对应前台的模板的路由地址"), |
|||
* @OA\Property(property="authority",type="string",default="sys:menu:add",description="按钮权限标识"), |
|||
* @OA\Property(property="icon",type="string",default="",description="菜单图标"), |
|||
* @OA\Property(property="color",type="string",default="",description="icon颜色"), |
|||
* @OA\Property(property="target",type="string",default="",description="是否新窗口 _target"), |
|||
* @OA\Property(property="iframe",type="integer",format="int15",default="0",description="是否为 iframe模式 0:不是 1:是"), |
|||
* @OA\Property(property="hide",type="integer",format="int15",minLength=1,maxLength=1,default="0",description="是否显示 0:显示 1:隐藏"), |
|||
* @OA\Property(property="sort",type="integer",format="int15",minLength=1,maxLength=100,default="0",description="排序"), |
|||
* @OA\Property(property="menu_type",type="integer",format="int15",minLength=1,maxLength=1,default="0",description="菜单类型 0:菜单 1:按钮"), |
|||
* @OA\Property(property="open_type",type="integer",format="int15",minLength=1,maxLength=1,default="0",description="打开方式 0:组件 1:内链 2:外链"), |
|||
* @OA\Property(property="is_dev",type="integer",format="int15",minLength=1,maxLength=1,default="0",description="1:开发者模式(即tp调试模式开启)"), |
|||
* @OA\Property(property="status",type="integer",format="int15",minLength=1,maxLength=1,default="1",description="状态:为1正常,为0禁用"), |
|||
* @OA\Property(property="condition",type="string",minLength=1,maxLength=100,default=" ",description="规则表达式,为空表示存在就验证,不为空表示按照条件验证"), |
|||
* @OA\Property(property="remarks",type="string",minLength=1,maxLength=200,default=" ",description="备注"), |
|||
* @OA\Property(property="child_list",type="string",minLength=1,maxLength=200,default=" ",description="100100 子集菜单集合"), |
|||
* ), |
|||
*/ |
|||
class Menu extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Menu(); |
|||
} |
|||
/** |
|||
* @OA\Get ( |
|||
* path="menu/index",tags={"权限菜单"},summary="获取菜单列表",description="根据相关参数获取菜单列表", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="path",in="query",description="前端权限路由",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="name",in="query",description="权限菜单名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回权限菜单菜单数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/MenuMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->param(); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['path', 'name']; |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Menu::class)->scene('lists')->check($_get); |
|||
|
|||
$_data = $this->model->index(); |
|||
|
|||
//数据处理 前台处理 |
|||
// $_data['data'] = get_tree($_data['data'], 0, 'children'); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post (path="menu/add",tags={"权限菜单"},summary="添加权限菜单数据",description="添加后台权限菜单数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/MenuField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录总数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了权限菜单:[name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Menu::class)->check($_post); |
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Get ( |
|||
* path="menu/read/id/{id}",tags={"权限菜单"},summary="获取菜单详情",description="根据ID查询菜单信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="id",in="path",required=true,description="ID",@OA\Schema (type="integer",format="int32")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回权限菜单菜单数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/MenuMsgExport"), |
|||
* ), |
|||
* ) |
|||
*/ |
|||
public function read($id = '') |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Menu::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="menu/edit/id/{id}",tags={"权限菜单"},summary="修改菜单数据",description="修改权限菜单数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/MenuField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time] 修改了权限菜单[name]的数据 |
|||
*/ |
|||
public function edit($id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = $id; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
validate(\app\api\validate\Menu::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="menu/delete",tags={"权限菜单"},summary="删除菜单数据",description="根据ID删除菜单数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了权限菜单:[name] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,100'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="menu/status",tags={"权限菜单"},summary="更新菜单状态",description="根据ID及status更新菜单状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] [dictionary_status]了权限菜单:[name] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
} |
|||
@ -0,0 +1,200 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
/** |
|||
* Created by 安徽云掌. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/8 22:30 |
|||
* Desc: 字典类型类 |
|||
*/ |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use think\App; |
|||
|
|||
|
|||
class Message extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\Message(); |
|||
} |
|||
|
|||
|
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//指定搜索参数 |
|||
$this->model->search_arr = ['title']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function read(int $id = 0) |
|||
{ |
|||
//验证参数 |
|||
validate(\app\api\validate\Message::class)->scene('read')->check(['id' => $id]); |
|||
|
|||
//返回数据 |
|||
return send_http_status($this->model->parentRead($id)); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/add",tags={"测试案例"},summary="添加DEMO数据",description="添加后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="添加成功", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="integer",format="int32",description="添加成功的的数据ID"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 创建了字典类型:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Dictionary::class)->check($_post); |
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post (path="demo/edit/id/{id}",tags={"测试案例"},summary="修改DEMO数据",description="修改后台DEMO管理数据", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema(ref="#/components/schemas/DemoField"), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="修改数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name]在[sys_time]修改了字典[dict_symbol]的数据 |
|||
*/ |
|||
public function edit(int $id = 0) |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
$_post['id'] = empty($_post['id']) ? $id : 0; //安全赋值,以免客户端没传id,修改需要id字段 |
|||
|
|||
//验证参数 |
|||
// validate(\app\api\validate\Dictionary::class)->scene('update')->check($_post); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentEdit($_post, $id) ? 203 : 204); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/delete",tags={"测试案例"},summary="删除DEMO数据",description="根据ID删除DEMO信息", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 删除了字典:[dict_symbol]:[dict_name] |
|||
*/ |
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
/** |
|||
* @OA\Post ( |
|||
* path="demo/status",tags={"测试案例"},summary="更新DEMO状态",description="根据ID及status更新DEMO状态", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\RequestBody( |
|||
* @OA\MediaType(mediaType="application/json", |
|||
* @OA\Schema ( |
|||
* required={"id","status"}, |
|||
* @OA\Property(property="id",type="string",description="数据ID或数据ID集合 id=1或 id=1,2,8"), |
|||
* @OA\Property(property="status",type="integer",format="int15",description="数据状态 0禁用 1启用"), |
|||
* ), |
|||
* ), |
|||
* ), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="删除数据状态", |
|||
* @OA\JsonContent(type="object", |
|||
* @OA\Property(property="code", type="integer",format="int32",description="状态码"), |
|||
* @OA\Property(property="msg", type="string",description="提示信息"), |
|||
* @OA\Property(property="count", type="integer",format="int32",description="记录数"), |
|||
* @OA\Property(property="data", type="string",description="不返回"), |
|||
* ), |
|||
* ), |
|||
* ) |
|||
* @Log [sys_name] 在 [sys_time] 设置ID为[id]测试账号为:[dictionary_status] |
|||
*/ |
|||
public function status() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
$status = $this->request->param('status'); |
|||
|
|||
//验证参数 |
|||
$_rules = [ |
|||
'ids|id' => 'require|length:1,100', |
|||
'status|状态值' => 'require|number|length:1', |
|||
]; |
|||
validate($_rules)->check(['ids' => $ids, 'status' => $status]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentStatus($ids, $status) !== false ? 207 : 208); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use function OpenApi\scan; |
|||
|
|||
class Swagger |
|||
{ |
|||
/** |
|||
* 生成json/yamf文件 |
|||
*/ |
|||
public function createFile() |
|||
{ |
|||
|
|||
$openapi = @scan(dirname(__DIR__)); |
|||
$spec = json_encode($openapi, JSON_PRETTY_PRINT); |
|||
if (file_put_contents('openapi.json', $spec)) { |
|||
echo 'http://' . \request()->server()['HTTP_HOST'] . '/openapi.json'; |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,71 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use edward\captcha\facade\CaptchaApi; |
|||
use service\ActionLog; |
|||
|
|||
class Test extends Common |
|||
{ |
|||
/** |
|||
* 邮件发送测试 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function sendMail() |
|||
{ |
|||
//配置smtp信息 |
|||
$transport = new \Swift_SmtpTransport('smtp.exmail.qq.com', 25); |
|||
$transport->setUsername('service@huamill.com'); |
|||
$transport->setPassword('Jiabaiyan1018'); |
|||
|
|||
//实例化mailer |
|||
$mailer = new \Swift_Mailer($transport); |
|||
|
|||
//邮件内容 |
|||
$message = new \Swift_Message('测试swiftmailer邮件类'); |
|||
$message->setContentType('text/html'); |
|||
$message->setFrom(['service@huamill.com' => 'cloud']); |
|||
$message->setTo('243993898@qq.com'); |
|||
$message->setBody('这是邮件内容,收到请勿回复'); |
|||
|
|||
//发送邮件 |
|||
$result = $mailer->send($message); |
|||
|
|||
halt($result); |
|||
} |
|||
|
|||
/** |
|||
* 发送短信验证码 |
|||
* @param int $phone |
|||
*/ |
|||
public function sendSms(string $phone = '') |
|||
{ |
|||
halt(CaptchaApi::createSMS($phone)); |
|||
} |
|||
|
|||
public function checkSms(string $code = '', string $phone = '') |
|||
{ |
|||
halt(CaptchaApi::checkSMS($code, $phone)); |
|||
} |
|||
|
|||
/** |
|||
* 日志类测试 |
|||
* @Log [sys_name] 在 [sys_time]新增插件数据 |
|||
*/ |
|||
public function writeLog() |
|||
{ |
|||
//手动写入日志数据 |
|||
ActionLog::getInstance()->write(); |
|||
} |
|||
|
|||
/** |
|||
* composer require jenssegers/agent 获取系统信息,访问终端判断、系统设备等信息 |
|||
*/ |
|||
public function systemInfo() |
|||
{ |
|||
echo 'system'; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,111 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller; |
|||
|
|||
use app\api\model\ImageStorages; |
|||
use think\App; |
|||
|
|||
/** |
|||
* 系统日志 |
|||
* @package app\api\controller |
|||
*/ |
|||
class UploadLog extends Common |
|||
{ |
|||
public $model = null; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new \app\api\model\UploadLog(); |
|||
} |
|||
/** |
|||
* @OA\Get ( |
|||
* path="log/index",tags={"上传日志管理"},summary="获取上传日志列表",description="根据相关参数获取日志列表", |
|||
* @OA\Parameter(ref="#/components/parameters/token"), |
|||
* @OA\Parameter(name="username",in="query",description="管理员名称",@OA\Schema (type="string")), |
|||
* @OA\Parameter(name="model",in="query",description="操作模块",@OA\Schema (type="string")), |
|||
* @OA\Parameter (name="page",in="query",description="当前页码",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Parameter (name="limit",in="query",description="分页数量",@OA\Schema (type="integer",format="int15")), |
|||
* @OA\Response( |
|||
* response=200, |
|||
* description="返回管理员用户数据信息", |
|||
* @OA\JsonContent(ref="#/components/schemas/LogMsgExport"), |
|||
* ), |
|||
* ), |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//接受参数 |
|||
$_get = $this->request->get(); |
|||
|
|||
//指定搜索参数 |
|||
// $this->model->search_arr = ['current']; |
|||
|
|||
//数据处理 |
|||
$_data = $this->model->index(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
public function add() |
|||
{ |
|||
//接收参数 |
|||
$_post = $this->request->post(); |
|||
|
|||
|
|||
//处理并返回参数 |
|||
$insertId = $this->model->parentAdd($_post); |
|||
return send_http_status($insertId, $insertId ? 201 : 202); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @Log [sys_name]在[sys_time] 删除了文件数据 |
|||
*/ |
|||
|
|||
public function delete() |
|||
{ |
|||
//接收参数 |
|||
$ids = $this->request->param('id'); |
|||
|
|||
//验证参数 |
|||
validate(['ids|id' => 'require|length:1,1000'])->check(['ids' => $ids]); |
|||
|
|||
//处理并返回数据 |
|||
return send_http_status('', $this->model->parentDel($ids) ? 205 : 206); |
|||
} |
|||
|
|||
public function getSiteLists(){ |
|||
//数据处理 |
|||
$_data = $this->model->getLists(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
} |
|||
|
|||
|
|||
public function getTagLists(){ |
|||
$tagLists = config('dict.sqlfields.image_storage_type'); |
|||
$senddData = []; |
|||
foreach ($tagLists as $key => $val){ |
|||
$item = []; |
|||
$item['title'] = $key; |
|||
$item['name'] = $val; |
|||
$senddData[] = $item; |
|||
} |
|||
return send_http_status($senddData); |
|||
} |
|||
|
|||
public function getStorageImages(){ |
|||
$model = new ImageStorages(); |
|||
$model->search_arr = ['title']; |
|||
$_data = $model->getStorgaeImagesLists(); |
|||
|
|||
//返回数据 |
|||
return send_http_status($_data); |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,96 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\controller\v1; |
|||
|
|||
use app\api\controller\Common; |
|||
use think\facade\Console; |
|||
use think\Request; |
|||
|
|||
class Test extends Common |
|||
{ |
|||
|
|||
/** |
|||
* 清除runtime下的file缓存 |
|||
*/ |
|||
public function clear() |
|||
{ |
|||
Console::call('clear'); |
|||
} |
|||
|
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
echo '加上v1版本号 一定要定制路由规则 '; |
|||
} |
|||
|
|||
/** |
|||
* 显示创建资源表单页. |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function create() |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 保存新建的资源 |
|||
* |
|||
* @param \think\Request $request |
|||
* @return \think\Response |
|||
*/ |
|||
public function save(Request $request) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 显示指定的资源 |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function read($id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 显示编辑资源表单页. |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function edit($id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 保存更新的资源 |
|||
* |
|||
* @param \think\Request $request |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function update(Request $request, $id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function delete($id) |
|||
{ |
|||
// |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
<?php |
|||
// 应用中间件定义文件 |
|||
return [ |
|||
//检测JwtToken中间件 |
|||
\app\middleware\CheckJwtAuth::class, |
|||
]; |
|||
@ -0,0 +1,101 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\Request; |
|||
use think\facade\Db; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Ad extends Common |
|||
{ |
|||
|
|||
protected $table = 'cloud_ad'; |
|||
protected $_data_table = 'ad_data'; |
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$name = $this->request->param('name', ''); |
|||
$_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
if ($name) { |
|||
$_op->whereLike('name', "%{$name}%"); |
|||
} |
|||
$_op->order('create_time DESC'); |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
//code |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 获取广告数据 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function AdData() |
|||
{ |
|||
$adid = $this->request->param('adid', ''); |
|||
|
|||
$_op = Db::name($this->_data_table)->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
if ($adid) { |
|||
$_op->whereLike('adid', $adid); |
|||
} |
|||
|
|||
$_op->order('create_time DESC'); |
|||
$data = parent::parentLists($_op); |
|||
$result = $data['data']; |
|||
|
|||
//查询广告位限制的图片宽度、高度 |
|||
$_ad = Db::name('ad')->field('width,height')->where('id',$adid)->find(); |
|||
array_walk($result, function (&$v) use ($_ad) { |
|||
$v['create_time'] = date('Y-m-d H:i:s', $v['create_time']); |
|||
$v['start_time'] = date('Y-m-d H:i:s', $v['start_time']); |
|||
$v['end_time'] = date('Y-m-d H:i:s', $v['end_time']); |
|||
$v['thumb'] = config('dictionary.upload.cdn_img_host') . $v['thumb']; |
|||
$v['crop_thumb'] = crop_thumb($v['thumb'], (int)$_ad['width'], (int)$_ad['height']); |
|||
}); |
|||
$data['data'] = $result; |
|||
return $data; |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\Request; |
|||
use think\facade\Db; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class AdData extends Common |
|||
{ |
|||
|
|||
protected $table = 'cloud_ad_data'; |
|||
protected $_data_table = 'ad_data'; |
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$name = $this->request->param('name', ''); |
|||
$_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
if ($name) { |
|||
$_op->whereLike('name', "%{$name}%"); |
|||
} |
|||
$_op->order('create_time DESC'); |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
if (!in_array(request()->action(), ['read','dataRead'])) { |
|||
return; |
|||
} |
|||
//成时间戳转化时间字符串 |
|||
$model->setAttr('end_time', date('Y-m-d H:i:s',$model->getAttr('end_time'))); |
|||
$model->setAttr('start_time', date('Y-m-d H:i:s',$model->getAttr('start_time'))); |
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
|
|||
// //时间字符串转化成时间戳 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
if (!in_array(request()->action(), ['add', 'edit','dataEdit','dataAdd'])) { |
|||
return; |
|||
} |
|||
//时间字符串转化成时间戳 |
|||
$model->setAttr('end_time', strtotime($model->getAttr('end_time'))); |
|||
$model->setAttr('start_time', strtotime($model->getAttr('start_time'))); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\Request; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Block extends Common |
|||
{ |
|||
|
|||
protected $table = 'cloud_block'; |
|||
|
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$name = $this->request->param('name', ''); |
|||
$_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
if ($name) { |
|||
$_op->whereLike('name', "%{$name}%"); |
|||
} |
|||
$_op->order('sort DESC,create_time DESC'); |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
//code |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,88 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\Request; |
|||
use think\facade\Db; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Column extends Common |
|||
{ |
|||
|
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$username = $this->request->param('username', ''); |
|||
$sex = $this->request->param('sex', '', 'intval'); |
|||
$truename = $this->request->param('truename', ''); |
|||
$_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
if ($username) { |
|||
$_op->whereLike('username', "%{$username}%"); |
|||
} |
|||
$data = parent::parentLists($_op); |
|||
|
|||
//获取栏目类型 |
|||
$_column_type = config('dictionary.sqlfields.column_type'); |
|||
$_model = Db::name('model')->column('*', 'id'); |
|||
$data_tmp = $data['data']; |
|||
|
|||
array_walk($data_tmp, function (&$v) use ($_model, $_column_type) { |
|||
$v['model_name'] = $_model[$v['model_id']]['name']; |
|||
$v['column_type_name'] = $_column_type[$v['type']]; |
|||
}); |
|||
$data['data'] = $data_tmp; |
|||
// $data = tree($data); |
|||
return $data; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
$model->setAttr('open', true); |
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
//code |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
|
|||
} |
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
//删除父级栏目下所有子栏目 |
|||
self::destroy(function ($query) use ($model) { |
|||
$query->where('child_list', 'like', $model->getAttr('child_list') . '%'); |
|||
}); |
|||
parent::onAfterDelete($model); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,270 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use service\ActionLog; |
|||
use think\App; |
|||
use think\Model; |
|||
use think\model\concern\SoftDelete; |
|||
|
|||
|
|||
/** |
|||
* 定义所有接口公共请求参数token【swagger ref使用】 |
|||
* @OA\Parameter( |
|||
* in="header", |
|||
* name="token", |
|||
* description="用户登录返回的jwt-token值", |
|||
* required=true, |
|||
* @OA\Schema( |
|||
* type="string" |
|||
* ) |
|||
* ), |
|||
* |
|||
*/ |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Common extends Model |
|||
{ |
|||
|
|||
use SoftDelete; |
|||
|
|||
protected $deleteTime = 'delete_time'; |
|||
|
|||
protected $readonly = ['id', 'site_id']; |
|||
|
|||
public $search_arr = []; //搜索数据 |
|||
|
|||
/** |
|||
* Request实例 |
|||
* @var \think\Request |
|||
*/ |
|||
protected $request; |
|||
|
|||
public function __construct(array $_data = []) |
|||
{ |
|||
parent::__construct($_data); |
|||
$this->request = request(); |
|||
} |
|||
|
|||
/** |
|||
* 获取单条数据基类模型 |
|||
* @param string $id |
|||
* @param null $_op 模型链式对象 |
|||
* @return array|Model|null |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function parentRead($id = '', $_op = null) |
|||
{ |
|||
if (!is_object($_op)) { |
|||
$_op = $this; |
|||
} |
|||
return $_op->where('site_id', SITE_ID)->find($id); |
|||
} |
|||
|
|||
/** |
|||
* 获取数据列表基类模型 |
|||
* @param null $_op 模型链式对象 |
|||
* @param int $ispage 是否分页,默认分页 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
protected function parentLists($_op = null, $ispage = 1,$issite=true) |
|||
{ |
|||
//模型对象为空,设定默认查询对象 |
|||
if($issite){ |
|||
if (!is_object($_op) || empty($_op)) { |
|||
$_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 |
|||
} else { |
|||
$_op->where('site_id', SITE_ID); //强制绑定站点参数 |
|||
} |
|||
} |
|||
|
|||
|
|||
//公共搜索查询 |
|||
if (count($this->search_arr) > 0) { |
|||
$_param = request()->param(); //搜索参数集合 |
|||
$_op->where(function ($query) use ($_param) { |
|||
foreach ($this->search_arr as $k => $v) { |
|||
$search_arr = explode(':', $v); |
|||
$search_name = $search_arr[0]; |
|||
$logic = $search_arr[1] ?? 'AND'; |
|||
if (array_key_exists($search_name, $_param)) { |
|||
if (!empty($_param[$search_name])) { |
|||
$query->whereLike($search_name, "%{$_param[$search_name]}%", $logic); |
|||
} |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
|
|||
//执行分页查询 |
|||
$page = $this->request->param('page', config('page')); |
|||
$limit = $this->request->param('limit', config('limit')); |
|||
$count = $_op->count(); |
|||
|
|||
$this->listsOrder($_op); //统一排序 |
|||
|
|||
//无分页判断 |
|||
$ispage != 1 ?: $_op->page((int)$page, (int)$limit); |
|||
|
|||
$_data = [ |
|||
'data' => $_op->select()->toArray(), |
|||
'page_total' => $count, |
|||
]; |
|||
return $_data; |
|||
} |
|||
|
|||
/** |
|||
* 数据排序 |
|||
*/ |
|||
private function listsOrder(&$_op) |
|||
{ |
|||
if ($_op->getOptions('order')) { |
|||
return; |
|||
} |
|||
$sort = $this->request->get('sort'); |
|||
$sort = in_array($sort, $this->checkAllowFields()) ? $sort : ''; |
|||
$order = $this->request->get('order', 'DESC', 'strtoupper') == 'ASC' ? 'ASC' : 'DESC'; |
|||
$sort_order = $sort . ' ' . $order; |
|||
if (empty($sort)) { |
|||
$sort_order = in_array('sort', $this->checkAllowFields()) ? 'sort DESC,create_time DESC' : 'create_time DESC'; |
|||
} |
|||
$_op->order($sort_order); |
|||
} |
|||
|
|||
/** |
|||
* 新增数据基类模型 |
|||
* @param array $_param |
|||
* @return Common|Model |
|||
*/ |
|||
public function parentAdd($_param = []) |
|||
{ |
|||
if (empty($_param)) { |
|||
$_param = $this->request->post(); |
|||
} |
|||
$_param['site_id'] = SITE_ID; |
|||
|
|||
$_result = self::create($_param); |
|||
return $_result->id; |
|||
} |
|||
|
|||
/** |
|||
* 修改基类模型 |
|||
* @param array $_data |
|||
* @param null $_op 模型链式对象 |
|||
* @param $id |
|||
* @return bool|\type |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function parentEdit($_data = [], $id = 0, $_op = null) |
|||
{ |
|||
if (empty($_data)) { |
|||
$_data = $this->request->param(); |
|||
} |
|||
if (!is_object($_op)) { |
|||
$_op = $this; |
|||
} |
|||
$_op = $_op->where('site_id', SITE_ID)->find($id); |
|||
if (empty($_op)) { |
|||
return send_http_status('', 101); |
|||
} |
|||
$_data['site_id'] = SITE_ID; //防止篡改站点 |
|||
|
|||
return $_op->save($_data); |
|||
} |
|||
|
|||
/** |
|||
* 删除 |
|||
* @param $id |
|||
* @param null $_op 模型链式对象 |
|||
* @param false $true_delete 是否真删除 默认软删除 |
|||
* @return bool|\type |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function parentDel($id, $_op = null, bool $true_delete = false) |
|||
{ |
|||
if (!is_object($_op)) { |
|||
$_op = $this; |
|||
} |
|||
$ids = explode(',', $id); |
|||
|
|||
$_op = $_op->where('id', 'in', $ids)->where('site_id', SITE_ID)->select(); |
|||
if ($_op->isEmpty()) { |
|||
return send_http_status('', 101); |
|||
} |
|||
return self::destroy($ids, $true_delete); //TP软删除 |
|||
} |
|||
|
|||
/** |
|||
* 更改数据状态 |
|||
* @param $id |
|||
* @param $status |
|||
* @param null $_op |
|||
* @return \type |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function parentStatus($id, $status, $_op = null) |
|||
{ |
|||
if (!is_object($_op)) { |
|||
$_op = $this; |
|||
} |
|||
$ids = explode(',', $id); |
|||
$_op = $_op->where('id', 'in', $ids)->where('site_id', SITE_ID)->select(); |
|||
if ($_op->isEmpty()) { |
|||
return send_http_status('', 101); |
|||
} |
|||
$_where = [ |
|||
['id', 'in', $ids], |
|||
['site_id', '=', SITE_ID], |
|||
]; |
|||
// $affected = self::where('id', 'in', $ids)->where('site_id', SITE_ID)->update(['status' => $status]); |
|||
$affected = self::update(['status' => $status], $_where); |
|||
return $affected; |
|||
} |
|||
|
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
$model->offsetUnset('delete_time'); |
|||
} |
|||
|
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
//以下参数禁止新增或更改 |
|||
$model->setAttr('copy_safe_id', (int)$model->getAttr('id')); //设定副本参数 |
|||
$model->setAttr('copy_safe_site_id', (int)$model->getAttr('site_id')); //设定副本参数 |
|||
$model->offsetUnset('id'); |
|||
$model->offsetUnset('site_id'); |
|||
$model->offsetUnset('delete_time'); |
|||
$model->offsetUnset('update_time'); |
|||
$model->offsetUnset('create_time'); |
|||
} |
|||
|
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
//增加创建和修改日志记录 |
|||
ActionLog::getInstance()->write($model->getData(), $model->getOrigin(), $model->getLastSql()); |
|||
|
|||
} |
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
//增加删除日志记录 |
|||
ActionLog::getInstance()->write($model->getData(), [], $model->getLastSql()); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,119 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* // swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="ConfigMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="数量", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="username", |
|||
* type="string", |
|||
* description="管理员名称", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="truename", |
|||
* type="string", |
|||
* description="管理员真实姓名", |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Config extends Common |
|||
{ |
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$_result = parent::parentLists('', 0); |
|||
$_result = array_column($_result['data'], 'value', 'name'); |
|||
//通用逻辑 |
|||
return $_result; |
|||
} |
|||
|
|||
public function edit(array $_post = []) |
|||
{ |
|||
//业务逻辑 |
|||
if (empty($_post)) { |
|||
return false; |
|||
} |
|||
$name_arr = array_keys($_post); |
|||
$id_arr = $this->where('name', 'in', $name_arr)->where('site_id', SITE_ID)->column('id'); |
|||
if (!empty($id_arr)) { |
|||
$affected = self::destroy($id_arr, true); //TP真删除 |
|||
if (!$affected) { |
|||
return false; |
|||
} |
|||
} |
|||
foreach ($_post as $k => $v) { |
|||
$_temp = [ |
|||
'name' => $k, |
|||
'value' => $v, |
|||
'site_id' => SITE_ID, |
|||
'create_time' => time(), |
|||
'update_time' => time(), |
|||
]; |
|||
$_data[] = $_temp; |
|||
} |
|||
return $this->insertAll($_data); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,137 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
/** |
|||
* swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="DemoMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="site_id", |
|||
* type="integer", |
|||
* description="站点ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="username", |
|||
* type="string", |
|||
* description="管理员名称", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="sex", |
|||
* type="integer", |
|||
* description="性别" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="delete_time", |
|||
* type="integer", |
|||
* description="是否删除 null:未删除" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="update_time", |
|||
* type="integer", |
|||
* description="更新时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="create_time", |
|||
* type="integer", |
|||
* description="创建时间" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Demo extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_demo'; //如cloud_开头不需要 |
|||
|
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//自定义处理逻辑 |
|||
// $username = $this->request->param('username', ''); |
|||
// $_op = $this->whereLike('username', "{$username}%"); |
|||
// return parent::parentLists($_op); |
|||
|
|||
//通用逻辑 |
|||
return parent::parentLists(); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
//写入数据前格式化数据 |
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
// code... |
|||
|
|||
//以下参数禁止新增或者修改 |
|||
$model->offsetUnset('ip'); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,108 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Dictionary extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_dictionary'; //如cloud_开头不需要 |
|||
|
|||
/** |
|||
* 字典列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//自定义处理逻辑 |
|||
$dict_name = $this->request->param('dict_name', ''); |
|||
$_op = $this->whereLike('dict_name', "{$dict_name}%"); |
|||
|
|||
$dict_value = $this->request->param('dict_value', ''); |
|||
$_op = $this->whereLike('dict_value', "{dict_value}%"); |
|||
|
|||
//自定义处理逻辑 |
|||
$dict_type_id = $this->request->param('dict_type_id', ''); |
|||
$_op = $this->where('dict_type_id', $dict_type_id); |
|||
|
|||
//通用逻辑 |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
public function chekName($name) |
|||
{ |
|||
//自定义处理逻辑 |
|||
$dict_type_id = $this->request->param('dict_type_id', ''); |
|||
$id = $this->request->param('id', ''); |
|||
$codition = [ |
|||
'dict_value' => $name, |
|||
'dict_type_id' => $dict_type_id, |
|||
|
|||
]; |
|||
|
|||
if($id >0){ |
|||
$count = $this->where($codition)->where('id','<>',$id)->count(); |
|||
}else{ |
|||
$count = $this->where($codition)->count(); |
|||
} |
|||
|
|||
return $count; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
//写入数据前格式化数据 |
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
// code... |
|||
} |
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
parent::onAfterDelete($model); // TODO: Change the autogenerated stub |
|||
$dic = new DictionaryType(); |
|||
$dic->exportDictToConfig(); |
|||
} |
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
parent::onAfterWrite($model); // TODO: Change the autogenerated stub |
|||
$dic = new DictionaryType(); |
|||
$dic->exportDictToConfig(); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,119 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\App; |
|||
use think\Env; |
|||
use think\Model; |
|||
use think\route\Rule; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class DictionaryType extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_dictionary_type'; //如cloud_开头不需要 |
|||
|
|||
/** |
|||
* 字典列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//自定义处理逻辑 |
|||
// $username = $this->request->param('username', ''); |
|||
// $_op = $this->whereLike('username', "{$username}%"); |
|||
//通用逻辑 |
|||
return parent::parentLists(); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
//写入数据前格式化数据 |
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
// code... |
|||
} |
|||
|
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
parent::onAfterDelete($model); // TODO: Change the autogenerated stub |
|||
//删除字典类型后 下属的字典值全部删除 |
|||
$dict_type_id = $model->getAttr('id'); |
|||
$diction = new Dictionary(); |
|||
$diction->destroy(['dict_type_id'=>$dict_type_id]); |
|||
$model->exportDictToConfig(); |
|||
|
|||
} |
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
parent::onAfterWrite($model); // TODO: Change the autogenerated stub |
|||
$model->exportDictToConfig(); |
|||
} |
|||
|
|||
|
|||
|
|||
public function exportDictToConfig(){ |
|||
$dict_datas = $this->field('a.dict_symbol,b.dict_name,b.dict_value')->alias('a') |
|||
->join(['system_dictionary'=>'b'],'a.id=b.dict_type_id','left') |
|||
->where('b.delete_time','null') |
|||
->select() |
|||
; |
|||
$datas = []; |
|||
foreach ($dict_datas as $item){ |
|||
$datas[$item['dict_symbol']][$item['dict_value']] = $item['dict_name']; |
|||
} |
|||
$path = \think\facade\App::getConfigPath().'dict.php'; |
|||
$ditc_text = " |
|||
<?php |
|||
/** |
|||
* 数据库字典表数据 |
|||
*/ |
|||
|
|||
return [ |
|||
'sqlfields' => |
|||
".var_export($datas,true)." |
|||
, |
|||
]; |
|||
"; |
|||
if (fopen($path,'w')){ |
|||
file_put_contents($path,$ditc_text); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class ImageStorages extends Common |
|||
{ |
|||
|
|||
public $table = 'system_image_storages'; |
|||
|
|||
|
|||
public function index(){ |
|||
$type = $this->request->param('type', 0); |
|||
$_op = $this->field('*'); |
|||
|
|||
if($type){ |
|||
$_op = $this->where('type',$type); |
|||
} |
|||
|
|||
//执行通用查询 |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
$typeArr = config('dict.sqlfields.image_storage_type'); |
|||
|
|||
$model->setAttr('type_str',$typeArr[$model->getAttr('type')]); |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,188 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\Request; |
|||
use auth\PermissAuth; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="LogMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="site_id", |
|||
* type="integer", |
|||
* description="站点ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="user_id", |
|||
* type="integer", |
|||
* description="管理员ID", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="username", |
|||
* type="string", |
|||
* description="管理员用户名", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="action_ip", |
|||
* type="string", |
|||
* description="执行行为者ip" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="model", |
|||
* type="string", |
|||
* description="操作模块" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="request_param", |
|||
* type="string", |
|||
* description="请求参数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="url", |
|||
* type="string", |
|||
* description="触发行为完整的url", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="request_method", |
|||
* type="string", |
|||
* description="请求方式", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="spend_time", |
|||
* type="float", |
|||
* description="耗时几秒", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="record_id", |
|||
* type="integer", |
|||
* description="触发行为的数据id", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="remark", |
|||
* type="string", |
|||
* description="日志备注" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="string", |
|||
* description="修改后数据集合" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="origin", |
|||
* type="string", |
|||
* description="修改前源数据" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="sql", |
|||
* type="string", |
|||
* description="执行的sql记录" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="status", |
|||
* type="integer", |
|||
* description="状态 0:禁用 1:启用" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="client_os", |
|||
* type="string", |
|||
* description="客户端系统类型" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="client_browser", |
|||
* type="string", |
|||
* description="客户端浏览器类型" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="client_device", |
|||
* type="string", |
|||
* description="客户端设备型号,如 phone x 由api传过来" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="delete_time", |
|||
* type="integer", |
|||
* description="是否删除 null:未删除" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="update_time", |
|||
* type="integer", |
|||
* description="更新时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="create_time", |
|||
* type="integer", |
|||
* description="创建时间" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
class Log extends Common |
|||
{ |
|||
|
|||
public $table = 'system_action_log'; |
|||
|
|||
/** |
|||
* 管理员列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$start_time = $this->request->param('create_time_start', ''); |
|||
$end_time = $this->request->param('create_time_end', ''); |
|||
if ($start_time && $end_time) { |
|||
$_op = $this->whereTime('create_time', '>=', strtotime($start_time)); |
|||
$_op->whereTime('create_time', '<=', strtotime('+1 day', strtotime($end_time))); |
|||
} |
|||
return parent::parentLists(!empty($_op) ? $_op : ''); |
|||
} |
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
$model->offsetSet('action_ip', long2ip((int)$model->getAttr('action_ip'))); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,289 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use auth\PermissAuth; |
|||
use think\Model; |
|||
|
|||
/** |
|||
* swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="ManagerMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="site_id", |
|||
* type="integer", |
|||
* description="站点ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="username", |
|||
* type="string", |
|||
* description="管理员名称", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="truename", |
|||
* type="string", |
|||
* description="管理员真实姓名", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="sex", |
|||
* type="integer", |
|||
* description="性别" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="phone", |
|||
* type="integer", |
|||
* description="手机号" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="email", |
|||
* type="string", |
|||
* description="邮箱", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="status", |
|||
* type="integer", |
|||
* description="状态", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="ip", |
|||
* type="integer", |
|||
* description="ip", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="avatar", |
|||
* type="string", |
|||
* description="头像地址", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="introduction", |
|||
* type="string", |
|||
* description="用户简介", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="delete_time", |
|||
* type="integer", |
|||
* description="是否删除 null:未删除" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="login_time", |
|||
* type="integer", |
|||
* description="最后登录时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="update_time", |
|||
* type="integer", |
|||
* description="更新时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="create_time", |
|||
* type="integer", |
|||
* description="创建时间" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Manager extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_user'; |
|||
|
|||
/** |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//执行通用查询 |
|||
return parent::parentLists(); |
|||
} |
|||
|
|||
/** |
|||
* 登录验证 |
|||
* @param array $_post |
|||
* @return array|\type |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function checkLogin($_post = []) |
|||
{ |
|||
//站点域名检测 |
|||
$site_id = (int)(new Site())->checkSite(); |
|||
|
|||
$_data = self::where('username', $_post['username'])->where('site_id', $site_id)->find(); |
|||
if (empty($_data)) { |
|||
return send_http_status('', 40502); |
|||
} |
|||
|
|||
if ($_data['status'] != 1) { |
|||
return send_http_status('', 40503); |
|||
} |
|||
|
|||
if (!password_verify($_post['password'], $_data['password'])) { |
|||
return send_http_status('', 40504); |
|||
} |
|||
//登录成功写入登录信息 |
|||
$this->setLoginIp($_data['id'], $site_id); |
|||
|
|||
return $_data->hidden(['password'])->toArray(); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 用户最后登录 IP |
|||
*/ |
|||
private function setLoginIp(int $user_id = 0, int $site_id = 0) |
|||
{ |
|||
$_data = [ |
|||
'ip' => ip2long(request()->ip()), |
|||
'login_time' => time(), |
|||
]; |
|||
$_op = $this->where('site_id', $site_id)->where('id', $user_id); |
|||
return $_op->save($_data); |
|||
} |
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
$model->hidden(['password']); |
|||
$model->offsetSet('ip', long2ip((int)$model->getAttr('ip'))); |
|||
$model->offsetSet('sexname', config('dictionary.sqlfields.sex')[$model->getAttr('sex')]); |
|||
//用户权限 |
|||
$model->offsetSet('authorities', PermissAuth::getInstance()->getAuthList($model->getAttr('id'), 1, true)); |
|||
//用户角色 |
|||
$_roles = PermissAuth::getInstance()->getUserGroups($model->getAttr('id')); |
|||
$model->offsetSet('roles', $_roles); |
|||
$model->offsetSet('role_ids', implode(',', array_column($_roles, 'id'))); |
|||
//省市区代码转换 |
|||
$model->setAttr('province_city', [$model->getAttr('province'), $model->getAttr('city'), $model->getAttr('area')]); |
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
if (!in_array(request()->action(), ['add'])) { |
|||
return true; |
|||
} |
|||
//密码加密 |
|||
$salt_password = password_hash($model->getAttr('password'), PASSWORD_DEFAULT); |
|||
$model->setAttr('password', $salt_password); |
|||
} |
|||
|
|||
/** |
|||
* 修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeUpdate(Model $model) |
|||
{ |
|||
//禁止修改用户名 |
|||
$model->offsetUnset('username'); |
|||
|
|||
$action = request()->action(); |
|||
|
|||
if (!in_array($action, ['edit', 'passwordEdit', 'passwordReset', 'editPersional'])) { |
|||
return true; |
|||
} |
|||
|
|||
//密码修改验证逻辑 |
|||
if ($action == 'passwordEdit') { |
|||
if (!password_verify($model->getData('old_password'), $model->getOrigin('password'))) { |
|||
return send_http_status('', 40504); |
|||
} |
|||
} |
|||
|
|||
//密码加密 |
|||
if ($action == 'passwordEdit' || $action == 'passwordReset') { |
|||
$salt_password = password_hash($model->getData('password'), PASSWORD_DEFAULT); |
|||
$model->setAttr('password', $salt_password); |
|||
} |
|||
|
|||
//省市区代码拆分 |
|||
$city_arr = $model->getAttr('province_city'); |
|||
if (!empty($city_arr)) { |
|||
$model->setAttr('province', $city_arr[0]); |
|||
$model->setAttr('city', $city_arr[1]); |
|||
$model->setAttr('area', $city_arr[2]); |
|||
} |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 新增前、修改前 同时 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//以下参数禁止新增或更改 |
|||
$model->offsetUnset('ip'); |
|||
} |
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
parent::onAfterWrite($model); |
|||
|
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//写入用户权限 |
|||
$id = $model->getAttr('id') ?? $model->getAttr('copy_safe_id'); |
|||
PermissAuth::getInstance()->addUserGroupAccess((int)$id, $model->getAttr('role_ids')); |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,226 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Menu extends Common |
|||
{ |
|||
|
|||
public $table = 'system_auth_rule'; |
|||
|
|||
|
|||
/** |
|||
* 列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$_op = config('app.app_debug') ?: $_op = $this->where('is_dev', 0); //开发者模式 |
|||
return parent::parentLists($_op, 0); |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
//设定child_list |
|||
if (empty($model->getAttr('parent_id'))) { |
|||
//parent_id = 0 一级栏目填充 |
|||
$child_list = self::where('parent_id', 0)->max('child_list'); |
|||
$child_list = !empty($child_list) ? (int)$child_list + 1 : 100; //如果不存在设置默认值 100起始 |
|||
$model->setAttr('child_list', $child_list); |
|||
} else { |
|||
//子栏目填充 |
|||
$child_list = self::where('parent_id', $model->getAttr('parent_id'))->max('child_list'); //同级最大 |
|||
$parent_child_list = self::where('id', $model->getAttr('parent_id'))->value('child_list'); //父级初始 |
|||
$child_list = !empty($child_list) ? (int)$child_list + 1 : $parent_child_list . '100'; |
|||
$model->setAttr('child_list', $child_list); |
|||
} |
|||
parent::onBeforeWrite($model); |
|||
} |
|||
|
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
//删除父级栏目下所有子栏目 |
|||
if ($model->getAttr('child_list')) { |
|||
self::where('child_list', 'like', $model->getAttr('child_list') . '%')->useSoftDelete('delete_time', time())->delete(); |
|||
} |
|||
parent::onAfterDelete($model); |
|||
} |
|||
|
|||
/** |
|||
* swagger response返回数据引用 |
|||
* @OA\Schema( |
|||
* schema="MenuMsgExport", |
|||
* required={"code","msg","count","data"}, |
|||
* @OA\Property( |
|||
* property="code", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="状态码" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="msg", |
|||
* type="string", |
|||
* description="提示消息" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="count", |
|||
* type="integer", |
|||
* format="int32", |
|||
* description="记录总数", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="data", |
|||
* type="array", |
|||
* description="请求结果", |
|||
* @OA\Items( |
|||
* @OA\Property( |
|||
* property="id", |
|||
* type="integer", |
|||
* description="菜单ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="site_id", |
|||
* type="integer", |
|||
* description="站点ID" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="name", |
|||
* type="string", |
|||
* description="菜单名称", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="parent_id", |
|||
* type="integer", |
|||
* description="父级ID", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="model_name", |
|||
* type="string", |
|||
* description="模块名/控制器/方法" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="path", |
|||
* type="string", |
|||
* description="对应前台的模板的路由地址" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="component", |
|||
* type="string", |
|||
* description="前台对应的组件路径", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="authority", |
|||
* type="string", |
|||
* description="按钮权限标识", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="icon", |
|||
* type="string", |
|||
* description="菜单图标", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="color", |
|||
* type="string", |
|||
* description="icon颜色", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="target", |
|||
* type="string", |
|||
* description="是否新窗口 _target/_self", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="iframe", |
|||
* type="integer", |
|||
* description="是否为 iframe模式 0:不是 1:是", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="hide", |
|||
* type="integer", |
|||
* description="是否显示 0:显示 1:隐藏", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="type", |
|||
* type="integer", |
|||
* description="在think_auth_rule 表中定义一条规则时,如果type为1, condition字段就可以定义规则表达式。 如定义{score}>5 and {score}<100 表示用户的分数在5-100之间时这条规则才会通过。", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="sort", |
|||
* type="integer", |
|||
* description="排序", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="menu_type", |
|||
* type="integer", |
|||
* description="菜单类型 0:菜单 1:按钮", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="open_type", |
|||
* type="integer", |
|||
* description="打开方式 0:组件 1:内链 2:外链", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="is_dev", |
|||
* type="integer", |
|||
* description="1:开发者模式(即tp调试模式开启)", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="status", |
|||
* type="integer", |
|||
* description="状态:为1正常,为0禁用", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="condition", |
|||
* type="string", |
|||
* description="规则表达式,为空表示存在就验证,不为空表示按照条件验证", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="remarks", |
|||
* type="string", |
|||
* description="备注", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="child_list", |
|||
* type="string", |
|||
* description="100100 子集菜单集合", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="children", |
|||
* type="object", |
|||
* description="子集菜单对象", |
|||
* ), |
|||
* @OA\Property( |
|||
* property="delete_time", |
|||
* type="integer", |
|||
* description="是否删除 null:未删除" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="update_time", |
|||
* type="integer", |
|||
* description="更新时间" |
|||
* ), |
|||
* @OA\Property( |
|||
* property="create_time", |
|||
* type="integer", |
|||
* description="创建时间" |
|||
* ), |
|||
* ) |
|||
* ), |
|||
* |
|||
* ), |
|||
*/ |
|||
|
|||
} |
|||
@ -0,0 +1,248 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use app\index\model\User; |
|||
use think\Db; |
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Message extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_message'; //如cloud_开头不需要 |
|||
|
|||
|
|||
/** |
|||
* 字典列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//自定义处理逻辑 |
|||
$title = $this->request->param('title', ''); |
|||
|
|||
$_op = $this->where('is_init',1); |
|||
|
|||
|
|||
//通用逻辑 |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
|
|||
public function getUserMessage($type){ |
|||
$_op = $this->where('receve_id',UID); |
|||
|
|||
if($type == 99){ |
|||
//获取未读系统消息总数 |
|||
$gg_count = $this->where('receve_id',UID)->where('type',1)->where('read_status',0)->count(); |
|||
//获取未读私信消息总数 |
|||
$sx_count = $this->where('receve_id',UID)->where('type',0)->where('read_status',0)->count(); |
|||
|
|||
//获取通知类型最新5条消息 |
|||
$gg_list = $this->where('receve_id',UID)->where('type',1)->where('read_status',0)->order('create_time desc,id desc')->limit(5)->select()->toArray(); |
|||
//获取 |
|||
$sx_list = $this->where('receve_id',UID)->where('type',0)->where('read_status',0)->order('create_time desc,id desc')->limit(5)->select()->toArray(); |
|||
$reData = []; |
|||
$reData['gg']['count'] = $gg_count; |
|||
$reData['gg']['list'] = $gg_list; |
|||
|
|||
$reData['sx']['count'] = $sx_count; |
|||
$reData['sx']['list'] = $sx_list; |
|||
return $reData; |
|||
}else if($type != 98){ |
|||
$_op->where('type',$type); |
|||
} |
|||
$_op->order('read_status asc,create_time desc'); |
|||
return parent::parentLists($_op); |
|||
|
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
|
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
|
|||
$content_id = $model->getAttr('content_id'); |
|||
$receve_id = $model->getAttr('receve_id'); |
|||
$send_id = $model->getAttr('send_id'); |
|||
if($content_id){ |
|||
$c_model = new MessageContent(); |
|||
$contents = $c_model->find($content_id); |
|||
$model->setAttr('title',$contents['title']); |
|||
$model->setAttr('content',$contents['content']); |
|||
$model->setAttr('pub_time',$contents['create_time']); |
|||
} |
|||
$u_model = new Manager(); |
|||
|
|||
if($receve_id>0){ |
|||
$receve_user = $u_model->find($receve_id)->toArray(); |
|||
if($receve_user){ |
|||
$model->setAttr('receve_user_str',$receve_user['truename']); |
|||
}else{ |
|||
$model->setAttr('receve_user_str',''); |
|||
} |
|||
}else{ |
|||
$model->setAttr('receve_user_str','所有人'); |
|||
} |
|||
|
|||
if($send_id>0){ |
|||
$receve_user = $u_model->find($send_id)->toArray(); |
|||
if($receve_user){ |
|||
$model->setAttr('send_user_str',$receve_user['truename']); |
|||
$model->setAttr('avatar_str',$receve_user['avatar']); |
|||
}else{ |
|||
$model->setAttr('send_user_str',''); |
|||
} |
|||
}else{ |
|||
$model->setAttr('send_user_str',''); |
|||
} |
|||
|
|||
|
|||
// $model->setAttr('create_time_str',date('Y-m-d H:i:s',$model->getAttr('create_time'))); |
|||
$model->setAttr('read_status_str',$model->getAttr('create_time')==1?'已读':'未读'); |
|||
|
|||
//业务逻辑 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
//写入数据前格式化数据 |
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
|
|||
$title = $model->getAttr('title'); |
|||
$content = $model->getAttr('content'); |
|||
$message_content = new MessageContent(); |
|||
$ms_content['title'] = $title; |
|||
$ms_content['content'] = $content; |
|||
if(request()->action() == 'add'){ |
|||
if($title && $content){ |
|||
$content_id = $message_content->parentAdd($ms_content); |
|||
$model->setAttr('content_id',$content_id); |
|||
} |
|||
}else{ |
|||
$c_id = $model->getAttr('content_id'); |
|||
if($title && $content){ |
|||
$message_content->where('id',$c_id)->save($ms_content); |
|||
} |
|||
} |
|||
$receve_id = $model->getAttr('receve_id'); |
|||
$type = $receve_id<0?1:0; |
|||
|
|||
$model->setAttr('send_id',UID); |
|||
|
|||
$model->setAttr('type',$type); |
|||
$model->hidden(['title','content']); |
|||
|
|||
//业务逻辑 |
|||
// code... |
|||
} |
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
parent::onAfterDelete($model); // TODO: Change the autogenerated stub |
|||
|
|||
} |
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
parent::onAfterWrite($model); // TODO: Change the autogenerated stub |
|||
|
|||
} |
|||
|
|||
/* |
|||
* 查看用户是否有待插入的公告 |
|||
* */ |
|||
public function setUserMessage($uid=0,$site_id=0){ |
|||
if(!$uid){ |
|||
$uid = UID; |
|||
} |
|||
if(!$site_id){ |
|||
$site_id = SITE_ID; |
|||
} |
|||
//获取用户最近一份公告的时间 |
|||
$last_gg = $this->withTrashed()->where('receve_id',$uid)->where('type',1)->order('create_time desc')->find(); |
|||
|
|||
if($last_gg){ |
|||
$last_gg = $last_gg->toArray(); |
|||
$start_time = strtotime($last_gg['create_time']); |
|||
} |
|||
//查询所有该用户没有的公告 |
|||
$no_ggs = $this->where('site_id','in',[1,$site_id])->where('type',1)->where('create_time','>',$start_time)->order('create_time asc')->select()->toArray(); |
|||
//var_dump($no_ggs);die; |
|||
foreach ($no_ggs as $item){ |
|||
$model = new Message(); |
|||
$gg_item = []; |
|||
$gg_item['send_id'] = $item['send_id']; |
|||
$gg_item['site_id'] = $site_id; |
|||
$gg_item['receve_id'] = $uid; |
|||
$gg_item['content_id'] = $item['content_id']; |
|||
$gg_item['is_init'] = 0; |
|||
$gg_item['type'] = 1; |
|||
$model->save($gg_item); |
|||
} |
|||
return true; |
|||
|
|||
} |
|||
|
|||
public function setMessageRead($ids,$type){ |
|||
$_where = [ |
|||
['site_id', '=', SITE_ID], |
|||
['receve_id','=',UID] |
|||
]; |
|||
if($ids == -1){ |
|||
if($type==0 || $type==1){ |
|||
$_where[] = ['type','=',$type]; |
|||
} |
|||
}else{ |
|||
$ids = explode(',', $ids); |
|||
$_where[] = ['id', 'in', $ids]; |
|||
} |
|||
$affected = self::update(['read_status' => 1], $_where); |
|||
return $affected; |
|||
} |
|||
|
|||
|
|||
public function setMessageDelete($ids){ |
|||
|
|||
$ids = explode(',', $ids); |
|||
if($ids){ |
|||
$_op = $this->where('id', 'in', $ids)->where('receve_id',UID)->where('site_id', SITE_ID)->select(); |
|||
if ($_op->isEmpty()) { |
|||
return send_http_status('', 101); |
|||
} |
|||
return self::destroy($ids); //TP软删除 |
|||
}else{ |
|||
return false; |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,79 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class MessageContent extends Common |
|||
{ |
|||
|
|||
protected $table = 'system_message_content'; //如cloud_开头不需要 |
|||
|
|||
/** |
|||
* 字典列表数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
//自定义处理逻辑 |
|||
$dict_name = $this->request->param('title', ''); |
|||
$_op = $this->whereLike('title', "{$dict_name}%"); |
|||
|
|||
//通用逻辑 |
|||
return parent::parentLists($_op); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
//读取数据前格式化数据 |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
} |
|||
|
|||
/** |
|||
* 新增或修改前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeWrite(Model $model) |
|||
{ |
|||
parent::onBeforeWrite($model); |
|||
|
|||
//写入数据前格式化数据 |
|||
if (!in_array(request()->action(), ['add', 'edit'])) { |
|||
return true; |
|||
} |
|||
//业务逻辑 |
|||
// code... |
|||
} |
|||
|
|||
public static function onAfterDelete(Model $model) |
|||
{ |
|||
parent::onAfterDelete($model); // TODO: Change the autogenerated stub |
|||
|
|||
} |
|||
|
|||
public static function onAfterWrite(Model $model) |
|||
{ |
|||
parent::onAfterWrite($model); // TODO: Change the autogenerated stub |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Site extends Common |
|||
{ |
|||
|
|||
/** |
|||
* 根据域名读取站点信息 |
|||
* @return array|\think\Model|null |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function checkSite() |
|||
{ |
|||
$_op = $this->whereFindInSet('host', $this->request->host()); |
|||
$_op->where('start_time', '<=', time()); |
|||
$_op->where('end_time', '>=', time()); |
|||
$_data = $_op->find(); |
|||
if (empty($_data)) { |
|||
return send_http_status('', 102); |
|||
} |
|||
return $_data->id; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,72 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use auth\JwtAuth; |
|||
use auth\PermissAuth; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class Token extends Common |
|||
{ |
|||
|
|||
/** |
|||
* 登录 |
|||
* @param array $data |
|||
* @return Common|\think\Model|void |
|||
*/ |
|||
public function add($data = []) |
|||
{ |
|||
$this->token = $data['token']; |
|||
$this->refresh_token = $data['refresh_token']; |
|||
$this->user_id = $data['user_id']; |
|||
$this->start_time = time(); |
|||
$this->site_id = $data['site_id']; |
|||
$this->end_time = time() + config('jwtauth.web.expire_time_refresh'); |
|||
$this->save(); |
|||
} |
|||
|
|||
/** |
|||
* 返回刷新token |
|||
* @param $refresh_token |
|||
* @return array|void |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function refreshToken($refresh_token) |
|||
{ |
|||
$time = time(); |
|||
$_op = self::where('refresh_token', $refresh_token); |
|||
$_op->where('start_time', '<', $time)->where('end_time', '>', $time); |
|||
$token_data = $_op->field('user_id,site_id')->find(); |
|||
if (!empty($token_data)) { |
|||
/** |
|||
* 登录用户ID |
|||
*/ |
|||
defined('UID') ?: define('UID', $token_data->getData('user_id')); |
|||
|
|||
/** |
|||
* 站点ID |
|||
*/ |
|||
defined('SITE_ID') ?: define('SITE_ID', $token_data->getData('site_id')); |
|||
// //查询用户信息 |
|||
// $loginUser = (new Manager())->parentRead(UID)->toArray(); |
|||
//发送JWT签证密钥 |
|||
$token_data->id = $token_data->user_id; |
|||
$token_obj = (JwtAuth::getInstance())->setToken($token_data); |
|||
$token = $token_obj->getToken(); |
|||
$_data = [ |
|||
'token' => $token, |
|||
'refresh_token' => $refresh_token, //返回refresh_token本身不延期 |
|||
'expire' => config('jwtauth.web.expire_time'), |
|||
// 'refresh_token' => $token_obj->createRefreshToken($this), |
|||
]; |
|||
return $_data; |
|||
} |
|||
return; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,164 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\model; |
|||
|
|||
use think\Model; |
|||
|
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class UploadLog extends Common |
|||
{ |
|||
|
|||
public $table = 'system_upload_log'; |
|||
|
|||
/** |
|||
* 上传日志数据模型 |
|||
* @return array|\think\Collection |
|||
* @throws \think\db\exception\DataNotFoundException |
|||
* @throws \think\db\exception\DbException |
|||
* @throws \think\db\exception\ModelNotFoundException |
|||
*/ |
|||
public function index() |
|||
{ |
|||
$current = $this->request->param('current', '/'); |
|||
|
|||
$direct = $this->request->param('direct', 0); |
|||
|
|||
$dic_arr = [ |
|||
'host', |
|||
'y', |
|||
'date', |
|||
// 'd', |
|||
'url', |
|||
]; |
|||
|
|||
$current_arr = explode('/',$current); |
|||
|
|||
if($current == '/' || $current == ''){ |
|||
$current_arr = [ |
|||
'/' |
|||
]; |
|||
} |
|||
$current_arr[0] = '/'; |
|||
//向下层取数据 |
|||
$field_name = $dic_arr[count($current_arr)-1]; |
|||
|
|||
|
|||
if($field_name == 'url'){ |
|||
$field_str = $field_name.',name,type,size ,0 as isDirectory,update_time,id'; |
|||
}else{ |
|||
$field_str = $field_name.' as name ,1 as isDirectory'; |
|||
} |
|||
|
|||
$conition = []; |
|||
|
|||
|
|||
$current_arr_1 = $current_arr; |
|||
if(count($current_arr_1)>1){ |
|||
unset($current_arr_1[count($current_arr_1)-1]); |
|||
$current_arr_1[0] = ''; |
|||
} |
|||
$pre_current = implode('/',$current_arr_1); |
|||
|
|||
$_op = $this->field($field_str); |
|||
//获取该id下的所有的域名 |
|||
$siteModel = new Site(); |
|||
$hosts_str = $siteModel->where('id',SITE_ID)->find(); |
|||
$host_arr = []; |
|||
if($current == '' || $current == '/'){ |
|||
if($hosts_str['host']){ |
|||
$host_arr = explode(',',$hosts_str['host']); |
|||
} |
|||
if(count($host_arr)==0){ |
|||
$host_arr[] = $_SERVER['host']; |
|||
} |
|||
$_op->whereIn('host',$host_arr); |
|||
}else{ |
|||
$conition['host'] = $current_arr[1]; |
|||
} |
|||
|
|||
//年 |
|||
if(isset($current_arr[2]) && $current_arr[2]!=''){ |
|||
$conition['Y'] = $current_arr[2]; |
|||
} |
|||
// //月 |
|||
// if(isset($current_arr[3]) &&$current_arr[3]!='' ){ |
|||
// $conition['m'] = $current_arr[3]; |
|||
// } |
|||
// //日 |
|||
// if(isset($current_arr[4]) && $current_arr[4]!=''){ |
|||
// $conition['d'] = $current_arr[4]; |
|||
// } |
|||
//日期 |
|||
if(isset($current_arr[3]) && $current_arr[3]!=''){ |
|||
$conition['date'] = $current_arr[3]; |
|||
} |
|||
|
|||
$_op->distinct(true); |
|||
$_op->where($conition); |
|||
|
|||
$data = parent::parentLists(!empty($_op) ? $_op : '',1,0); |
|||
$count = $this->field($field_name)->where($conition)->group($field_name)->count(); |
|||
|
|||
$data['page_total'] = $count; |
|||
$returnData = []; |
|||
// $data['current'] = $current; |
|||
// $data['pre_current'] = $pre_current; |
|||
// $returnData['data'] = $data; |
|||
// $returnData['page_total'] = $data['page_total']; |
|||
|
|||
return $data; |
|||
} |
|||
|
|||
public function getLists(){ |
|||
//执行通用查询 |
|||
return parent::parentLists(); |
|||
} |
|||
|
|||
|
|||
public function getStorgaeImagesLists(){ |
|||
$type = $this->request->param('type', 0); |
|||
$_op = $this; |
|||
if($type){ |
|||
$_op->where('type',$type); |
|||
} |
|||
|
|||
|
|||
//执行通用查询 |
|||
return parent::parentLists(); |
|||
} |
|||
|
|||
/** |
|||
* 读取后 |
|||
* @param Model $model |
|||
* @return bool|void |
|||
*/ |
|||
public static function onAfterRead(Model $model) |
|||
{ |
|||
if (in_array(request()->action(), ['edit', 'delete', 'status'])) { |
|||
return true; |
|||
} |
|||
$model->offsetSet('action_ip', long2ip((int)$model->getAttr('action_ip'))); |
|||
} |
|||
|
|||
/** |
|||
* 新增前 |
|||
* @param Model $model |
|||
* @return mixed|void |
|||
*/ |
|||
public static function onBeforeInsert(Model $model) |
|||
{ |
|||
if (!in_array(request()->action(), ['add'])) { |
|||
return true; |
|||
} |
|||
//密码加密 |
|||
$m = $model->getAttr('m'); |
|||
$d = $model->getAttr('d'); |
|||
$model->setAttr('date', $m.$d); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|||
// +---------------------------------------------------------------------- |
|||
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. |
|||
// +---------------------------------------------------------------------- |
|||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: liu21st <liu21st@gmail.com> |
|||
// +---------------------------------------------------------------------- |
|||
use think\facade\Route; |
|||
|
|||
//Route::rule(':ver/login', 'api/v1.Login/login')->allowCrossDomain(); |
|||
//Route::rule(':ver/refreshToken', 'api/v1.Login/refreshToken'); |
|||
//Route::rule(':ver/getManager/:id', 'api/v1.Manager/read'); |
|||
//Route::rule(':ver/getUser', 'api/v1.Manager/index')->allowCrossDomain(['Access-Control-Allow-Headers'=>'token']); |
|||
//Route::rule(':ver/updateManager/[:id]', 'api/:ver.Manager/edit'); |
|||
//Route::rule(':ver/addManager', 'api/:ver.Manager/create'); |
|||
//Route::rule(':ver/delManager', 'api/:ver.Manager/delete'); |
|||
//Route::rule(':ver/index', 'api/v1.Index/index'); |
|||
|
|||
//Route::rule('getManager', 'api/Manager/index'); |
|||
Route::get('manager/int <id>', 'api/Manager/read'); |
|||
Route::rule(':ver/test', 'api/:ver.Test/index'); //测试多层级api |
|||
@ -0,0 +1,58 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\facade\Db; |
|||
use think\Validate; |
|||
|
|||
class Ad extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'name|广告名称' => "require|length:1,50", |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'name.require' => '请输入广告位名称', |
|||
'name.length' => '广告位名称必需在1~50位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('name', 'require'); |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\facade\Db; |
|||
use think\Validate; |
|||
|
|||
class AdData extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'adid' => "require|number|length:1,50", |
|||
'link' => 'url', |
|||
'sort' => 'number', |
|||
'start_time' => 'require|dateFormat:Y-m-d H:i:s', |
|||
'end_time' => 'require|dateFormat:Y-m-d H:i:s|gt:start_time', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'adid.require' => '请输入广告位ID', |
|||
'adid.number' => '广告位ID必须是数字', |
|||
'adid.length' => '广告位ID需在1~50位之间', |
|||
'start_time.dateFormat' => '开始时间格式不正确', |
|||
'end_time.dateFormat' => '结束时间格式不正确', |
|||
'end_time.gt' => '结束时间必须大于开始时间', |
|||
'end_time.require' => '结束时间不能为空', |
|||
'start_time.require' => '结束时间不能为空', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('name', 'require'); |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,59 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\facade\Db; |
|||
use think\Validate; |
|||
|
|||
class Block extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'ident|碎片标识' => "require|uniqueSite:cloud_block|alphaDash|length:1,50", |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'ident.require' => '请输入碎片标识', |
|||
'ident.length' => '碎片标识必需在1~50位之间', |
|||
'ident.alphaDash'=>'碎片标志是能是数字字母和下划线组成' |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('ident', 'require'); |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,54 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Config extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'name|配置名称' => "require|uniqueSite:bmz_config|length:1,30", |
|||
'value|配置内容' => 'require|length:1,200', |
|||
'type|配置类型' => 'require|length:1,30', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'name.require' => '请输入配置名称', |
|||
'name.length' => '配置名称必需在1~30位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
return $this->only(['name', 'value', 'type']) |
|||
->remove('name', 'uniqueSite|require|length') |
|||
->remove('value', 'length|require') |
|||
->remove('type', 'length|require'); |
|||
} |
|||
} |
|||
@ -0,0 +1,67 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Demo extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'username|测试账号' => "require|uniqueSite:system_demo|length:4,20", |
|||
'truename|测试真实姓名' => 'require|length:1,20', |
|||
'password|测试密码' => 'require|length:6,20', |
|||
'sex|性别' => 'number|between:0,2', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'username.require' => '请输入测试账号', |
|||
'username.length' => '测试账号名称必需在4~20位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('username', 'require') |
|||
->remove('truename', 'require') |
|||
->remove('phone', 'require'); |
|||
//需删除以上代码,重新定义 |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
return $this->only(['username', 'truename', 'sex']) |
|||
->remove('username', 'uniqueSite|require|length') |
|||
->append('username', 'min:1|max:20') |
|||
->remove('truename', 'uniqueSite|require'); |
|||
//需删除以上代码,重新定义 |
|||
} |
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Dictionary extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'dict_type_id|字典类型id' => "require|integer", |
|||
'dict_name|字典名称' => 'require|length:1,100', |
|||
'dict_value|字典值' => "require|checkValue", |
|||
|
|||
]; |
|||
|
|||
// 验证名称是否存在 |
|||
protected function checkValue($value, $rule, $data=[]) |
|||
{ |
|||
$_op = new \app\api\model\Dictionary(); |
|||
$count = $_op->chekName($value); |
|||
return $count == 0 ? true : '该类型下字典值不能重复'; |
|||
} |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'dict_name.require' => '请输入字典标志', |
|||
'dict_name.length' => '字典标志长度为1~100', |
|||
'dict_value.require' => '请输入字典值', |
|||
'dict_value.length' => '字典值为1~100', |
|||
'dict_type_id.require' => '字典类型不能为空', |
|||
'dict_type_id.integer' => '字典类型为存数字', |
|||
|
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
// return $this->remove('dict_symbol', 'dict_value')->append(''); |
|||
|
|||
} |
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
//需删除以上代码,重新定义 |
|||
return $this->only(['dict_type_id','dict_name', 'dict_value']) |
|||
->remove('dict_name', 'require') |
|||
->remove('dict_value', 'require') |
|||
->remove('dict_value', 'checkValue') |
|||
// ->remove('dict_type_id', 'require|integer') |
|||
; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class DictionaryType extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'dict_symbol|字典标志' => "require|checkSymbol|alphaDash|length:2,50", |
|||
'dict_name|字典名称' => 'require|length:2,100', |
|||
]; |
|||
|
|||
// 验证名称是否存在 |
|||
protected function checkSymbol($value, $rule, $data=[]) |
|||
{ |
|||
$_op = new \app\api\model\DictionaryType(); |
|||
$count = $_op->where('dict_symbol',$value)->count(); |
|||
return $count == 0 ? true : '字典类型标志不能重复'; |
|||
} |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'dict_symbol.require' => '请输入字典类型标志', |
|||
'dict_symbol.length' => '字典类型标志必需在2~50位之间', |
|||
'dict_symbol.checkSymbol' => '字典类型标志不能重复', |
|||
'dict_symbol.alphaDash' => '字典类型只能是字母,数字和下划线', |
|||
'dict_name.require' => '请输入字典类型名称', |
|||
'dict_name.length' => '字典类型名称必需在2~100位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('dict_symbol', 'checkSymbol'); |
|||
//需删除以上代码,重新定义 |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,52 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Group extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'title|角色名称' => "require|uniqueSite:system_auth_group|length:2,20", |
|||
'role_code|角色标识' => "require|uniqueSite:system_auth_group|length:2,20", |
|||
'remark|角色备注' => 'length:2,200', |
|||
'status|状态' => 'number|length:1', |
|||
'page|页码' => 'number|length:1,10', |
|||
'pagesize|每页数量' => 'number|length:1,10', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'title.require' => '请输入角色名称', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
public function sceneLists() |
|||
{ |
|||
return $this->remove('title', 'require|uniqueSite|length') |
|||
->append('title', 'min:1|max:20') //删除title length之后 ,再append length就无效了,只能换成min max |
|||
->remove('role_code','require|uniqueSite|length') |
|||
->append('role_code','min:1|max:20'); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,62 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Log extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'username|管理员账号' => "length:1,20", |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'username.length' => '管理员账号名称必需在1~20位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('username', 'require') |
|||
->remove('truename', 'require') |
|||
->remove('phone', 'require'); |
|||
//需删除以上代码,重新定义 |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
return $this->only(['username', 'truename', 'sex']) |
|||
->remove('username', 'uniqueSite|require|length') |
|||
->append('username', 'min:1|max:20') |
|||
->remove('truename', 'uniqueSite|require'); |
|||
//需删除以上代码,重新定义 |
|||
} |
|||
} |
|||
@ -0,0 +1,92 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\facade\Db; |
|||
use think\Validate; |
|||
|
|||
class Manager extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'username|管理员账号' => "require|uniqueSite:system_user|length:4,20", |
|||
'truename|管理员真实姓名' => 'require|length:1,20', |
|||
'password|管理员密码' => 'require|length:6,20', |
|||
'sex|性别' => 'number|length:1,1', |
|||
'phone|手机号' => 'require|uniqueSite:system_user|mobile', |
|||
'email|邮箱' => 'email|uniqueSite:system_user', |
|||
'avatar|头像' => 'length:6,255', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'username.require' => '请输入管理员账号', |
|||
'username.length' => '管理员账号名称必需在4~20位之间', |
|||
'password2.confirm' => '新密码与确认密码不一致', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
return $this->remove('username', 'require') |
|||
->remove('password', 'require'); |
|||
} |
|||
|
|||
/** |
|||
* 修改密码场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdatePassword() |
|||
{ |
|||
return $this->remove('username', 'require') |
|||
->remove('truename', 'require') |
|||
->remove('phone', 'require') |
|||
->append('password2|确认密码', 'require|confirm:password'); |
|||
} |
|||
|
|||
/** |
|||
* 重置密码场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneResetPassword() |
|||
{ |
|||
return $this->remove('username', 'require') |
|||
->remove('truename', 'require') |
|||
->remove('phone', 'require'); |
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
return $this->only(['username', 'truename', 'sex']) |
|||
->remove('username', 'uniqueSite|require|length') |
|||
->append('username', 'min:1|max:20') |
|||
->remove('truename', 'require'); |
|||
} |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\facade\Db; |
|||
use think\Validate; |
|||
|
|||
class Menu extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
'name|菜单名称' => "require|uniqueSite:system_auth_rule|length:1,15", |
|||
'path|路由地址' => 'length:1,100', |
|||
'model_name|接口地址' => 'require|length:1,100', |
|||
'component|组件路径' => 'length:1,100', |
|||
'authority|权限标识' => 'uniqueSite:system_auth_rule|length:1,100', |
|||
'icon|图标' => 'length:1,100', |
|||
'hide|显示隐藏' => 'max:1|min:0', |
|||
'sort|排序' => 'between:0,10000', |
|||
'menu_type|菜单类型' => 'max:1|min:0', |
|||
'remarks|菜单备注' => 'length:1,100', |
|||
]; |
|||
|
|||
/** |
|||
* 定义错误信息 |
|||
* 格式:'字段名.规则名' => '错误信息' |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $message = [ |
|||
'username.require' => '请输入菜单名称', |
|||
'username.length' => '菜单名称必需在1~15位之间', |
|||
]; |
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* 自定义查询场景验证 可灵活设置验证字段 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneLists() |
|||
{ |
|||
return $this->remove('name', 'require|uniqueSite') |
|||
->remove('model_name', 'require'); |
|||
} |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\api\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class Message extends Validate |
|||
{ |
|||
/** |
|||
* 定义验证规则 |
|||
* 格式:'字段名' => ['规则1','规则2'...] |
|||
* |
|||
* @var array |
|||
*/ |
|||
protected $rule = [ |
|||
'id' => 'number|length:1,10', |
|||
]; |
|||
|
|||
|
|||
|
|||
|
|||
/** |
|||
* 验证场景规则 |
|||
* @var array |
|||
*/ |
|||
protected $scene = [ |
|||
'read' => ['id'], |
|||
]; |
|||
|
|||
/** |
|||
* 修改场景验证 |
|||
* @return Manager |
|||
*/ |
|||
public function sceneUpdate() |
|||
{ |
|||
// return $this->remove('dict_symbol', 'dict_value')->append(''); |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,251 @@ |
|||
<?php |
|||
// 应用公共文件 |
|||
|
|||
|
|||
/** |
|||
* 解析文档注释正则匹配 |
|||
* @param $str //完整注释 |
|||
* @param string $tag 获取指定的标签数据 |
|||
* @return string |
|||
*/ |
|||
if (!function_exists('get_doc_comment')) { |
|||
function get_doc_comment($str, $tag = '') |
|||
{ |
|||
if (empty($tag)) { |
|||
return $str; |
|||
} |
|||
|
|||
$matches = array(); |
|||
preg_match("/@" . $tag . "(.*)(\\r\\n|\\r|\\n)/U", $str, $matches); |
|||
|
|||
if (isset($matches[1])) { |
|||
return trim($matches[1]); |
|||
} |
|||
|
|||
return ''; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 自定义全局验证器 判断同站点是否有重复数据 示例:uniqueSite:表名 |
|||
* @param $value 验证数据 |
|||
* @param $rule 验证规则 |
|||
* @param $data 全部数据(数组) |
|||
* @param $name 字段名 |
|||
* @param $note 字段描述 |
|||
* @return bool |
|||
*/ |
|||
function extra_unique_validate($value, $rule, $data, $name, $note) |
|||
{ |
|||
$_db = \think\facade\Db::table($rule)->where('site_id', SITE_ID); |
|||
//id存在需要判断修改逻辑下排除id本身且不为空的情况下 有没有重复 |
|||
$id = !empty($data['id']) ? $data['id'] : ''; |
|||
if ($id) { |
|||
$_db->where('id', '<>', $id); |
|||
$_db->where($name, '<>', ' '); |
|||
} |
|||
$_data = $_db->where($name, $value)->find(); |
|||
if (empty($_data)) { |
|||
return true; |
|||
} |
|||
return $note . '已存在,请重新输入!!!'; |
|||
} |
|||
|
|||
/** |
|||
* json统一返回 |
|||
* @param type $code 状态编码 0正常 |
|||
* @param type $data 返回数据 |
|||
* @param type $msg 错误的提示信息 |
|||
* @return type |
|||
*/ |
|||
function send_http_status($data = [], $code = 0, $httpStatus = 200, $msg = '') |
|||
{ |
|||
$msg = !empty($msg) ? $msg : config('dictionary')[$code]; |
|||
//排除成功的状态信息 |
|||
if (in_array($code, [201, 203, 205, 207, 209])) { |
|||
$code = 0; |
|||
} |
|||
|
|||
$_data = [ |
|||
'code' => $code, |
|||
'msg' => $msg, |
|||
'count' => 0, |
|||
'data' => $data, |
|||
]; |
|||
|
|||
//更改data2级数据为一级 增加列表页count数据 |
|||
if (isset($data['page_total'])) { |
|||
$_data['count'] = $data['page_total']; |
|||
$_data['data'] = empty($data['data']) ? [] : $data['data']; |
|||
} |
|||
|
|||
if ($code != 0 && $code != 200) { |
|||
throw new \app\exception\HttpException($httpStatus, $msg, $code); |
|||
} |
|||
return json($_data, $httpStatus); |
|||
} |
|||
|
|||
/** |
|||
* 把格式数组,拆分父栏目,与子栏目 |
|||
* @param type $arr 一级数组 |
|||
* @param type $pid 父id |
|||
* @param type $child_name 生成子数组的名称 |
|||
* @param type $primary 表的主键值,上一级id |
|||
* @return type |
|||
*/ |
|||
function get_tree(array $arr, $pid = 0, $child_name = 'children', $primary = 'id') |
|||
{ |
|||
if (empty($arr)) { |
|||
return $arr; |
|||
} |
|||
if (is_array($arr)) { |
|||
$child = get_child($arr, $pid); |
|||
if (empty($child)) { |
|||
return null; |
|||
} |
|||
foreach ($child as $key => $value) { |
|||
$current_child = get_tree($arr, $value[$primary]); |
|||
if ($current_child != null) { |
|||
$child[$key][$child_name] = $current_child; |
|||
} |
|||
} |
|||
} |
|||
return $child; |
|||
} |
|||
|
|||
//根据pid获取子栏目 返回子栏目数组集合 |
|||
function get_child($arr, $pid = 0) |
|||
{ |
|||
if (is_array($arr)) { |
|||
$child = array(); |
|||
foreach ($arr as $key => $value) { |
|||
if ($value['parent_id'] == $pid) { |
|||
$child[$key] = $value; |
|||
} |
|||
} |
|||
return array_values($child); |
|||
} |
|||
return $arr; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 云掌图片服务器裁剪函数 |
|||
* @param $src 源地址,不带?号 |
|||
* @param $w 宽度 |
|||
* @param $h 高度 |
|||
* @param $g 裁剪位置 nw西北 north正北 ne东北 west正西 center中间 east正东 sw西南 south正南 se东南 |
|||
* @param string $type 执行方式 crop:裁剪 resize:缩放 |
|||
*/ |
|||
function crop_thumb($src, $w = '', $h = '') |
|||
{ |
|||
//判断图片是不是全路径 |
|||
$cdn_img_host = strpos($src, 'http') !== 0 ? config('cdn_img_host') : ''; |
|||
if (empty($src) || !$w || !$h) { |
|||
return $cdn_img_host . $src; |
|||
} |
|||
//限制宽、高大小 |
|||
if ($w > 2000 || $w < 5 || $h > 2000 || $h < 5) { |
|||
return $src; |
|||
} |
|||
//有逗号分割符取第一张图片 |
|||
$first_pic = strstr($src, ',', true); |
|||
$src = !empty($first_pic) ? $first_pic : $src; |
|||
//拆分图片后缀 |
|||
$last_pos = strripos($src, '.'); //图片格式中点的位置 |
|||
$base_url = mb_substr($src, 0, $last_pos); //去图片后缀的url |
|||
$exp_url = mb_substr($src, $last_pos); //图片后缀 |
|||
return $cdn_img_host . $base_url . '_' . $w . 'x' . $h . $exp_url; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 判断浏览器名称和版本 |
|||
*/ |
|||
function get_client_browser() |
|||
{ |
|||
$agent = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : false; |
|||
if (!$agent) { |
|||
return false; |
|||
} |
|||
if ((strpos($agent, 'MSIE') == false) && (strpos($agent, 'Trident') !== FALSE)) { |
|||
return 'Internet Explorer 11.0'; |
|||
} |
|||
if (strpos($agent, 'MSIE 10.0') != false) { |
|||
return 'Internet Explorer 10.0'; |
|||
} |
|||
if (strpos($agent, 'MSIE 9.0') != false) { |
|||
return 'Internet Explorer 9.0'; |
|||
} |
|||
if (strpos($agent, 'MSIE 8.0') != false) { |
|||
return 'Internet Explorer 8.0'; |
|||
} |
|||
if (strpos($agent, 'MSIE 7.0') != false) { |
|||
return 'Internet Explorer 7.0'; |
|||
} |
|||
if (strpos($agent, 'MSIE 6.0') != false) { |
|||
return 'Internet Explorer 6.0'; |
|||
} |
|||
if (strpos($agent, 'Edge') != false) { |
|||
return 'Edge'; |
|||
} |
|||
if (strpos($agent, '360SE') != false) { |
|||
return '360SE'; |
|||
} |
|||
if (strpos($agent, 'QQBrowser') != false) { |
|||
return 'QQBrowser'; |
|||
} |
|||
if (strpos($agent, 'Firefox') != false) { |
|||
return 'Firefox'; |
|||
} |
|||
if (strpos($agent, 'Chrome') != false) { |
|||
return 'Chrome'; |
|||
} |
|||
if (strpos($agent, 'Safari') != false) { |
|||
return 'Safari'; |
|||
} |
|||
if (strpos($agent, 'Opera') != false) { |
|||
return 'Opera'; |
|||
} |
|||
//微信浏览器 |
|||
if (strpos($agent, 'MicroMessage') != false) { |
|||
return '微信浏览器'; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 获取系统类型 |
|||
*/ |
|||
function get_client_os() |
|||
{ |
|||
|
|||
$agent = strtolower($_SERVER['HTTP_USER_AGENT']); |
|||
|
|||
if (strpos($agent, 'windows nt')) { |
|||
$platform = 'Windows'; |
|||
} elseif (strpos($agent, 'macintosh')) { |
|||
$platform = 'Mac'; |
|||
} elseif (strpos($agent, 'ipod')) { |
|||
$platform = 'iPod'; |
|||
} elseif (strpos($agent, 'ipad')) { |
|||
$platform = 'iPad'; |
|||
} elseif (strpos($agent, 'iphone')) { |
|||
$platform = 'iPhone'; |
|||
} elseif (strpos($agent, 'android')) { |
|||
$platform = 'Android'; |
|||
} elseif (strpos($agent, 'unix')) { |
|||
$platform = 'Unix'; |
|||
} elseif (strpos($agent, 'linux')) { |
|||
$platform = 'Linux'; |
|||
} else { |
|||
$platform = '其他'; |
|||
} |
|||
|
|||
return $platform; |
|||
} |
|||
|
|||
//过滤单双引号 |
|||
function htmlspecialchars_custom($str) |
|||
{ |
|||
return htmlspecialchars($str, ENT_QUOTES); |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
<?php |
|||
// 事件定义文件 |
|||
return [ |
|||
'bind' => [ |
|||
], |
|||
|
|||
'listen' => [ |
|||
'AppInit' => [], |
|||
'HttpRun' => [], |
|||
'HttpEnd' => [], |
|||
'LogLevel' => [], |
|||
'LogWrite' => [], |
|||
], |
|||
|
|||
'subscribe' => [ |
|||
], |
|||
]; |
|||
@ -0,0 +1,82 @@ |
|||
<?php |
|||
|
|||
namespace app\exception; |
|||
|
|||
use think\db\exception\DataNotFoundException; |
|||
use think\db\exception\ModelNotFoundException; |
|||
use think\Exception; |
|||
use think\exception\Handle; |
|||
use app\exception\HttpException; |
|||
use think\exception\HttpResponseException; |
|||
use think\exception\ValidateException; |
|||
use think\Response; |
|||
use Throwable; |
|||
|
|||
/** |
|||
* 应用异常处理类 |
|||
*/ |
|||
class ExceptionHandle extends Handle |
|||
{ |
|||
|
|||
private $httpStatusCode = 200; //http状态码 |
|||
|
|||
private $msg = '未知错误'; //自定义错误内容 |
|||
|
|||
private $code = 100; //自定义错误码 |
|||
|
|||
/** |
|||
* 不需要记录信息(日志)的异常类列表 |
|||
* @var array |
|||
*/ |
|||
protected $ignoreReport = [ |
|||
HttpException::class, |
|||
HttpResponseException::class, |
|||
ModelNotFoundException::class, |
|||
DataNotFoundException::class, |
|||
ValidateException::class, |
|||
]; |
|||
|
|||
/** |
|||
* 记录异常信息(包括日志或者其它方式记录) |
|||
* |
|||
* @access public |
|||
* @param Throwable $exception |
|||
* @return void |
|||
*/ |
|||
public function report(Throwable $exception): void |
|||
{ |
|||
// 使用内置的方式记录异常日志 |
|||
parent::report($exception); |
|||
} |
|||
|
|||
/** |
|||
* Render an exception into an HTTP response. |
|||
* throw new \app\exception\HttpException(309, ''); http使用方法 |
|||
* throw new Exception('导演',300); 异常类使用访求 |
|||
* @access public |
|||
* @param \think\Request $request |
|||
* @param Throwable $e |
|||
* @return Response |
|||
*/ |
|||
public function render($request, Throwable $e): Response |
|||
{ |
|||
// 其他错误交给系统处理 |
|||
if (config('app.app_debug')) { |
|||
return parent::render($request, $e); |
|||
} |
|||
// 添加自定义异常处理机制 |
|||
$this->msg = $e->getMessage() ?: $this->msg; |
|||
//兼容Exception类 这个类没有getStatusCode方法 |
|||
if ($e instanceof HttpException) { |
|||
$this->httpStatusCode = $e->getStatusCode() ?: $this->httpStatusCode; |
|||
} |
|||
$this->code = $e->getCode() ?: $this->code; |
|||
$data = [ |
|||
'msg' => $this->msg, |
|||
'data' => [], |
|||
'code' => $this->code, |
|||
]; |
|||
return json($data, $this->httpStatusCode); |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ] |
|||
// +---------------------------------------------------------------------- |
|||
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. |
|||
// +---------------------------------------------------------------------- |
|||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: yunwuxin <448901948@qq.com> |
|||
// +---------------------------------------------------------------------- |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\exception; |
|||
|
|||
use Exception; |
|||
|
|||
/** |
|||
* HTTP异常 |
|||
*/ |
|||
class HttpException extends \RuntimeException |
|||
{ |
|||
private $statusCode; |
|||
private $headers; |
|||
|
|||
public function __construct(int $statusCode, string $message = '', $code = 0, array $headers = [], Exception $previous = null) |
|||
{ |
|||
$this->statusCode = $statusCode; |
|||
$this->headers = $headers; |
|||
|
|||
parent::__construct($message, $code, $previous); |
|||
} |
|||
|
|||
public function getStatusCode() |
|||
{ |
|||
return $this->statusCode; |
|||
} |
|||
|
|||
public function getHeaders() |
|||
{ |
|||
return $this->headers; |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
<?php |
|||
/** |
|||
* Created by 花密欧团队. |
|||
* User: 云掌.帮德 |
|||
* Date: 2020/3/5 13:34 |
|||
* Desc: |
|||
*/ |
|||
|
|||
namespace app\facade; |
|||
|
|||
use think\facade; |
|||
|
|||
class Test extends Facade |
|||
{ |
|||
public static function getFacadeClass() |
|||
{ |
|||
return 'test\Test'; |
|||
} |
|||
} |
|||
@ -0,0 +1,87 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\index\controller; |
|||
|
|||
use app\facade\Test; |
|||
use auth\JwtAuth; |
|||
use think\Request; |
|||
|
|||
class Blog |
|||
{ |
|||
/** |
|||
* 显示资源列表 |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function index() |
|||
{ |
|||
JwtAuth::index(); |
|||
} |
|||
|
|||
/** |
|||
* 显示创建资源表单页. |
|||
* |
|||
* @return \think\Response |
|||
*/ |
|||
public function create(Request $request) |
|||
{ |
|||
Test::index(); |
|||
} |
|||
|
|||
/** |
|||
* 保存新建的资源 |
|||
* |
|||
* @param \think\Request $request |
|||
* @return \think\Response |
|||
*/ |
|||
public function save(Request $request) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 显示指定的资源 |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function read($id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 显示编辑资源表单页. |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function edit($id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 保存更新的资源 |
|||
* |
|||
* @param \think\Request $request |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function update(Request $request, $id) |
|||
{ |
|||
// |
|||
} |
|||
|
|||
/** |
|||
* 删除指定资源 |
|||
* |
|||
* @param int $id |
|||
* @return \think\Response |
|||
*/ |
|||
public function delete($id) |
|||
{ |
|||
// |
|||
} |
|||
} |
|||
@ -0,0 +1,30 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\index\controller; |
|||
|
|||
|
|||
use app\index\model\User; |
|||
use think\Exception; |
|||
|
|||
class Index |
|||
{ |
|||
|
|||
public function hello(User $user) |
|||
{ |
|||
exit('a'); |
|||
echo 'a'; |
|||
echo 'b'; |
|||
echo 'c'; |
|||
echo 'd'; |
|||
echo 'e'; |
|||
|
|||
throw new \app\exception\HttpException(401, '', 19999); |
|||
// halt($user->find(7)); |
|||
} |
|||
|
|||
public function index(){ |
|||
echo "hello"; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,89 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\index\controller; |
|||
|
|||
use Lcobucci\Clock\FrozenClock; |
|||
use Lcobucci\JWT\Configuration; |
|||
use Lcobucci\JWT\Signer\Hmac\Sha256; |
|||
use Lcobucci\JWT\Signer\Key\InMemory; |
|||
use Lcobucci\JWT\UnencryptedToken; |
|||
use Lcobucci\JWT\Validation\Constraint; |
|||
|
|||
class Jwt |
|||
{ |
|||
private $config; |
|||
|
|||
public function __construct() |
|||
{ |
|||
// $key = InMemory::plainText('my-key'); |
|||
// $key = InMemory::base64Encoded('bXkgdGVzdCB0b2tlbnMK'); |
|||
$key = 'bXkgdGVzdCB0b2tlbnMK'; |
|||
$this->config = Configuration::forSymmetricSigner( |
|||
new Sha256(), |
|||
InMemory::plainText($key) |
|||
); |
|||
|
|||
} |
|||
|
|||
public function createToken() |
|||
{ |
|||
|
|||
|
|||
// halt($key,$configuration); |
|||
// echo($config instanceof Configuration); |
|||
$now = new \DateTimeImmutable(); |
|||
$token = $this->config->builder() |
|||
// jwt签发者 |
|||
->issuedBy('http://example.com') |
|||
// Configures the audience (aud claim) |
|||
->permittedFor('http://example.org') |
|||
// jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。 |
|||
->identifiedBy('4f1g23a12aa') |
|||
// jwt的签发时间 |
|||
->issuedAt($now) |
|||
// Configures the time that the token can be used (nbf claim) |
|||
->canOnlyBeUsedAfter($now->modify('+1 minute')) |
|||
// Configures the expiration time of the token (exp claim) |
|||
->expiresAt($now->modify('+1 minute')) |
|||
// Configures a new claim, called "uid" |
|||
->withClaim('uid', 10) |
|||
// Configures a new header, called "foo" |
|||
->withHeader('foo', 'bar') |
|||
// Builds a new token |
|||
->getToken($this->config->signer(), $this->config->signingKey()); |
|||
|
|||
// halt($token->claims()->get('uid')); |
|||
halt($token->toString()); |
|||
} |
|||
|
|||
public function parseToken() |
|||
{ |
|||
$_token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhaGJtei5jb20iLCJhdWQiOiJiYXNlLmFoYm16LmNvbSIsImp0aSI6Imx3RWluZ2U0RXk4RXhqeHBVODNrbEtsZmVpYW84TCIsImlhdCI6IjE2MTUyNjkxNDIuOTQ2NDc3IiwibmJmIjoiMTYxNTI2OTE0Mi45NDY0NzciLCJleHAiOiIxNjE1MzQxMTQyLjk0NjQ3NyIsInVzZXJfaWQiOjEsInNpdGVfaWQiOjF9.9bGtgvWH0iredbmuJrfhA2hY0aatEnpX3g-jKY9bLXs'; |
|||
$token = $this->config->parser()->parse($_token); |
|||
halt($token->headers(), $token->claims()); |
|||
} |
|||
|
|||
public function checkToken() |
|||
{ |
|||
$config = $this->config; |
|||
$_token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImZvbyI6ImJhciJ9.eyJpc3MiOiJodHRwOi8vZXhhbXBsZS5jb20iLCJhdWQiOiJodHRwOi8vZXhhbXBsZS5vcmciLCJqdGkiOiI0ZjFnMjNhMTJhYSIsImlhdCI6IjE2MTQxNzc0NjkuNDM3NDMwIiwibmJmIjoiMTYxNDE3NzUyOS40Mzc0MzAiLCJleHAiOiIxNjE0MTc3NTI5LjQzNzQzMCIsInVpZCI6MTB9.oC37eJvIsGGNu7X6J7axbH7-Rzs-MJQsI5gvqmpDn-Q'; |
|||
$token = $config->parser()->parse($_token); |
|||
// halt($config->parser()->parse($_token)); |
|||
$constraint = new Constraint\SignedWith($this->config->signer(), $this->config->verificationKey()); |
|||
$config->setValidationConstraints($constraint); |
|||
$constraints = $config->validationConstraints(); |
|||
if (!$config->validator()->validate($token, ...$constraints)) { |
|||
exit('no way!'); |
|||
}else{ |
|||
$now = new \DateTimeImmutable(); |
|||
// $clock = new FrozenClock($now); |
|||
// $a = new Constraint\LooseValidAt($clock,new \DateInterval('P2W')); |
|||
// halt($a,$token->isExpired($now)); |
|||
halt($token); |
|||
halt($token->isMinimumTimeBefore($now),$token->isPermittedFor('http://example.org'),$token->isExpired($now),$token->hasBeenIssuedBy('http://example.com')); |
|||
exit('验证通过'); |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\index\model; |
|||
|
|||
use think\Model; |
|||
|
|||
/** |
|||
* @mixin think\Model |
|||
*/ |
|||
class User extends Model |
|||
{ |
|||
// |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|||
// +---------------------------------------------------------------------- |
|||
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. |
|||
// +---------------------------------------------------------------------- |
|||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: liu21st <liu21st@gmail.com> |
|||
// +---------------------------------------------------------------------- |
|||
use think\facade\Route; |
|||
|
|||
Route::get('user/:id','index/Index/hello'); |
|||
@ -0,0 +1,20 @@ |
|||
<?php |
|||
// 全局中间件定义文件 |
|||
return [ |
|||
// 全局请求缓存 |
|||
// \think\middleware\CheckRequestCache::class, |
|||
// 多语言加载 |
|||
// \think\middleware\LoadLangPack::class, |
|||
// Session初始化 |
|||
// \think\middleware\SessionInit::class |
|||
//自定义跨域中间件 |
|||
\app\middleware\AllowCrossDomain::class, |
|||
// 系统跨域,传入token参数 |
|||
// \think\middleware\AllowCrossDomain::class, |
|||
// [ |
|||
// \think\middleware\AllowCrossDomain::class, |
|||
// [ |
|||
// ['Access-Control-Allow-Headers' => 'Token,Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With'] |
|||
// ] |
|||
// ], |
|||
]; |
|||
@ -0,0 +1,44 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\middleware; |
|||
|
|||
use think\App; |
|||
|
|||
class AllowCrossDomain |
|||
{ |
|||
|
|||
protected $app; |
|||
|
|||
public function __construct(App $app) |
|||
{ |
|||
$this->app = $app; |
|||
} |
|||
|
|||
/** |
|||
* 处理请求 |
|||
* |
|||
* @param \think\Request $request |
|||
* @param \Closure $next |
|||
* @return Response |
|||
*/ |
|||
public function handle($request, \Closure $next) |
|||
{ |
|||
|
|||
/** @var Response $response */ |
|||
$response = $next($request); |
|||
|
|||
// 支持跨域请求的host数组['a.cn', 'b.cn'] |
|||
$corsHost = ['api.base.ahbmz.com', 'api.ahbmz.com', 'cms.ahbmz.com']; |
|||
|
|||
// if (!empty($corsHost) && is_array($corsHost) && in_array($request->host(), $corsHost)) { |
|||
$response->header([ |
|||
'Access-Control-Allow-Origin' => '*', |
|||
'Access-Control-Max-Age' => 1800, |
|||
'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE', |
|||
'Access-Control-Allow-Headers' => 'Authorization, Token, Content-Type, If-Match,If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With', |
|||
]); |
|||
// } |
|||
return $response; |
|||
} |
|||
} |
|||
@ -0,0 +1,70 @@ |
|||
<?php |
|||
declare (strict_types=1); |
|||
|
|||
namespace app\middleware; |
|||
|
|||
use auth\JwtAuth; |
|||
|
|||
class CheckJwtAuth |
|||
{ |
|||
/** |
|||
* 处理请求 |
|||
* |
|||
* @param \think\Request $request |
|||
* @param \Closure $next |
|||
* @return Response |
|||
*/ |
|||
public function handle($request, \Closure $next) |
|||
{ |
|||
//获取当前控制器模型 |
|||
// $url = str_replace(['//', '\\', '/'], '', $request->root()) . '/' . $request->pathinfo(); |
|||
// $filter_router = config('jwtauth.filter_router'); |
|||
// foreach ($filter_router as $v) { |
|||
// if (strpos(strtolower($url), strtolower($v)) === 0) { |
|||
// return $next($request); |
|||
// } |
|||
// } |
|||
|
|||
//测试开户app_debug,设置自定用户参数及站点参数 |
|||
env('app_debug') ? $this->getLocalToken() : $this->getJwtToken(); |
|||
|
|||
return $next($request); |
|||
} |
|||
|
|||
/** |
|||
* 正式环境 |
|||
* @return \type |
|||
*/ |
|||
private function getJwtToken() |
|||
{ |
|||
$token = JwtAuth::getInstance()->checkToken(request()->header('Token')); |
|||
if ($token) { |
|||
|
|||
/** |
|||
* 登录用户ID |
|||
*/ |
|||
defined('UID') ?: define('UID', $token['user_id']); |
|||
|
|||
/** |
|||
* 站点ID |
|||
*/ |
|||
defined('SITE_ID') ?: define('SITE_ID', $token['site_id']); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 本地模拟 |
|||
*/ |
|||
private function getLocalToken() |
|||
{ |
|||
/** |
|||
* 登录用户ID |
|||
*/ |
|||
defined('UID') ?: define('UID', Request()->param('uid', 1)); |
|||
|
|||
/** |
|||
* 站点ID |
|||
*/ |
|||
defined('SITE_ID') ?: define('SITE_ID', Request()->param('site_id', 1)); |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
<?php |
|||
|
|||
use app\ExceptionHandle; |
|||
use app\Request; |
|||
|
|||
// 容器Provider定义文件 |
|||
return [ |
|||
'think\Request' => Request::class, |
|||
// 'think\exception\Handle' => ExceptionHandle::class, //原系统 |
|||
'think\exception\Handle' => 'app\\exception\\ExceptionHandle', //自定义异常类 |
|||
]; |
|||
@ -0,0 +1,9 @@ |
|||
<?php |
|||
|
|||
use app\AppService; |
|||
|
|||
// 系统服务定义文件 |
|||
// 服务在完成全局初始化之后执行 |
|||
return [ |
|||
AppService::class, |
|||
]; |
|||
@ -0,0 +1,55 @@ |
|||
{ |
|||
"name": "topthink/think", |
|||
"description": "the new thinkphp framework", |
|||
"type": "project", |
|||
"keywords": [ |
|||
"framework", |
|||
"thinkphp", |
|||
"ORM" |
|||
], |
|||
"homepage": "http://thinkphp.cn/", |
|||
"license": "Apache-2.0", |
|||
"authors": [ |
|||
{ |
|||
"name": "liu21st", |
|||
"email": "liu21st@gmail.com" |
|||
}, |
|||
{ |
|||
"name": "yunwuxin", |
|||
"email": "448901948@qq.com" |
|||
} |
|||
], |
|||
"require": { |
|||
"php": ">=7.1.0", |
|||
"topthink/framework": "^6.0.0", |
|||
"topthink/think-orm": "^2.0", |
|||
"topthink/think-multi-app": "^1.0", |
|||
"lcobucci/jwt": "^4.0", |
|||
"topthink/think-migration": "^3.0", |
|||
"doctrine/annotations": "^1.8", |
|||
"zircote/swagger-php": "^3.1", |
|||
"swiftmailer/swiftmailer": "^6.2", |
|||
"edward1108/edward-captcha": "^1.1" |
|||
}, |
|||
"require-dev": { |
|||
"symfony/var-dumper": "^4.2", |
|||
"topthink/think-trace":"^1.0" |
|||
}, |
|||
"autoload": { |
|||
"psr-4": { |
|||
"app\\": "app" |
|||
}, |
|||
"psr-0": { |
|||
"": "extend/" |
|||
} |
|||
}, |
|||
"config": { |
|||
"preferred-install": "dist" |
|||
}, |
|||
"scripts": { |
|||
"post-autoload-dump": [ |
|||
"@php think service:discover", |
|||
"@php think vendor:publish" |
|||
] |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,36 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 应用设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// 应用地址 |
|||
'app_host' => env('app.host', ''), |
|||
//调试开关 |
|||
'app_debug' => env('app_debug', false), |
|||
// 应用的命名空间 |
|||
'app_namespace' => '', |
|||
// 是否启用路由 |
|||
'with_route' => true, |
|||
// 是否启用事件 |
|||
'with_event' => true, |
|||
// 默认应用 |
|||
'default_app' => 'index', |
|||
// 默认时区 |
|||
'default_timezone' => 'Asia/Shanghai', |
|||
|
|||
// 应用映射(自动多应用模式有效) |
|||
'app_map' => [], |
|||
// 域名绑定(自动多应用模式有效) |
|||
'domain_bind' => [], |
|||
// 禁止URL访问的应用列表(自动多应用模式有效) |
|||
'deny_app_list' => [], |
|||
|
|||
// 异常页面的模板文件 |
|||
'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', |
|||
|
|||
// 错误显示信息,非调试模式有效 |
|||
'error_message' => '页面错误!请稍后再试~', |
|||
// 显示错误信息 |
|||
'show_error_msg' => true, |
|||
]; |
|||
@ -0,0 +1,20 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | PermissAuth权限系统配置文件 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
'auth_on' => 1, // 权限开关 |
|||
'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。 |
|||
'auth_group' => 'system_auth_group', // 用户组数据不带前缀表名 |
|||
'auth_group_access' => 'system_auth_group_access', // 用户-用户组关系不带前缀表名 |
|||
'auth_rule' => 'system_auth_rule', // 权限规则不带前缀表名 |
|||
'auth_user' => 'system_user', // 用户信息不带前缀表名 |
|||
'auth_filter_model' => [ |
|||
'api/login/login' => '用户登录', |
|||
'api/manager/permissMenu' => '用户获取菜单', |
|||
'api/manager/read' => '用户个人信息', |
|||
'api/manager/passwordReset' => '修改密码', |
|||
'api/Dashboard/index' => '仪表盘', |
|||
] |
|||
]; |
|||
@ -0,0 +1,29 @@ |
|||
<?php |
|||
|
|||
// +---------------------------------------------------------------------- |
|||
// | 缓存设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// 默认缓存驱动 |
|||
'default' => env('cache.driver', 'file'), |
|||
|
|||
// 缓存连接方式配置 |
|||
'stores' => [ |
|||
'file' => [ |
|||
// 驱动方式 |
|||
'type' => 'File', |
|||
// 缓存保存目录 |
|||
'path' => '', |
|||
// 缓存前缀 |
|||
'prefix' => '', |
|||
// 缓存有效期 0表示永久缓存 |
|||
'expire' => 0, |
|||
// 缓存标签前缀 |
|||
'tag_prefix' => 'tag:', |
|||
// 序列化机制 例如 ['serialize', 'unserialize'] |
|||
'serialize' => [], |
|||
], |
|||
// 更多的缓存连接 |
|||
], |
|||
]; |
|||
@ -0,0 +1,39 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Captcha配置文件 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
//验证码位数 |
|||
'length' => 4, |
|||
// 验证码字符集合 |
|||
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', |
|||
// 验证码过期时间 |
|||
'expire' => 1800, |
|||
// 是否使用中文验证码 |
|||
'useZh' => false, |
|||
// 是否使用算术验证码 |
|||
'math' => true, |
|||
// 是否使用背景图 |
|||
'useImgBg' => false, |
|||
//验证码字符大小 |
|||
'fontSize' => 18, |
|||
// 是否使用混淆曲线 |
|||
'useCurve' => true, |
|||
//是否添加杂点 |
|||
'useNoise' => true, |
|||
// 验证码字体 不设置则随机 |
|||
'fontttf' => '', |
|||
//背景颜色 |
|||
'bg' => [243, 251, 254], |
|||
// 验证码图片高度 |
|||
'imageH' => 48, |
|||
// 验证码图片宽度 |
|||
'imageW' => 130, |
|||
|
|||
// 添加额外的验证码设置 |
|||
// verify => [ |
|||
// 'length'=>4, |
|||
// ... |
|||
//], |
|||
]; |
|||
@ -0,0 +1,9 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 控制台配置 |
|||
// +---------------------------------------------------------------------- |
|||
return [ |
|||
// 指令定义 |
|||
'commands' => [ |
|||
], |
|||
]; |
|||
@ -0,0 +1,18 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Cookie设置 |
|||
// +---------------------------------------------------------------------- |
|||
return [ |
|||
// cookie 保存时间 |
|||
'expire' => 0, |
|||
// cookie 保存路径 |
|||
'path' => '/', |
|||
// cookie 有效域名 |
|||
'domain' => '', |
|||
// cookie 启用安全传输 |
|||
'secure' => false, |
|||
// httponly设置 |
|||
'httponly' => false, |
|||
// 是否使用 setcookie |
|||
'setcookie' => true, |
|||
]; |
|||
@ -0,0 +1,62 @@ |
|||
<?php |
|||
|
|||
return [ |
|||
// 默认使用的数据库连接配置 |
|||
'default' => env('database.driver', 'mysql'), |
|||
|
|||
// 自定义时间查询规则 |
|||
'time_query_rule' => [], |
|||
|
|||
// 自动写入时间戳字段 |
|||
// true为自动识别类型 false关闭 |
|||
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date |
|||
'auto_timestamp' => true, |
|||
|
|||
// 时间字段取出后的默认时间格式 |
|||
'datetime_format' => 'Y-m-d H:i:s', |
|||
|
|||
// 数据库连接配置信息 |
|||
'connections' => [ |
|||
'mysql' => [ |
|||
// 数据库类型 |
|||
'type' => env('database.type', 'mysql'), |
|||
// 服务器地址 |
|||
'hostname' => env('database.hostname', '122.114.59.173'), |
|||
// 数据库名 |
|||
'database' => env('database.database', 'bmz_base'), |
|||
// 用户名 |
|||
'username' => env('database.username', 'bmz_base'), |
|||
// 密码 |
|||
'password' => env('database.password', 'C2dA3FPLZxhDjKnr'), |
|||
// 端口 |
|||
'hostport' => env('database.hostport', '3306'), |
|||
// 数据库连接参数 |
|||
'params' => [], |
|||
// 数据库编码默认采用utf8 |
|||
'charset' => env('database.charset', 'utf8mb4'), |
|||
// 数据库表前缀 |
|||
'prefix' => env('database.prefix', 'bmz_'), |
|||
|
|||
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) |
|||
'deploy' => 0, |
|||
// 数据库读写是否分离 主从式有效 |
|||
'rw_separate' => false, |
|||
// 读写分离后 主服务器数量 |
|||
'master_num' => 1, |
|||
// 指定从服务器序号 |
|||
'slave_no' => '', |
|||
// 是否严格检查字段是否存在 |
|||
'fields_strict' => true, |
|||
// 是否需要断线重连 |
|||
'break_reconnect' => false, |
|||
// 监听SQL |
|||
'trigger_sql' => env('app_debug', true), |
|||
// 开启字段缓存 |
|||
'fields_cache' => false, |
|||
// 字段缓存路径 |
|||
'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR, |
|||
], |
|||
|
|||
// 更多的数据库配置信息 |
|||
], |
|||
]; |
|||
@ -0,0 +1,53 @@ |
|||
|
|||
<?php |
|||
/** |
|||
* 数据库字典表数据 |
|||
*/ |
|||
|
|||
return [ |
|||
'sqlfields' => |
|||
array ( |
|||
'status' => |
|||
array ( |
|||
0 => '禁用', |
|||
1 => '启用', |
|||
), |
|||
'sex' => |
|||
array ( |
|||
1 => '女', |
|||
2 => '男', |
|||
), |
|||
'column_type' => |
|||
array ( |
|||
0 => '列表', |
|||
1 => '单页', |
|||
2 => '外部链接', |
|||
3 => '留言板', |
|||
), |
|||
'ad_type' => |
|||
array ( |
|||
0 => '固定广告', |
|||
1 => '幻灯广告', |
|||
2 => '对联广告', |
|||
3 => '漂浮广告', |
|||
), |
|||
'image_storage_type' => |
|||
array ( |
|||
0 => '全部', |
|||
1 => '商务', |
|||
2 => '建筑', |
|||
3 => '山水', |
|||
4 => '风景', |
|||
5 => '办公', |
|||
6 => '天空', |
|||
7 => '家具', |
|||
8 => '汽车', |
|||
9 => '服装', |
|||
10 => '工厂', |
|||
11 => '安全', |
|||
12 => '峡谷', |
|||
), |
|||
) |
|||
, |
|||
]; |
|||
|
|||
@ -0,0 +1,86 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|||
// +---------------------------------------------------------------------- |
|||
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. |
|||
// +---------------------------------------------------------------------- |
|||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|||
// +---------------------------------------------------------------------- |
|||
// | Author: liu21st <liu21st@gmail.com> |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
// +---------------------------------------------------------------------- |
|||
// | 数据字典配置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
//登录数据字典 |
|||
'0' => 'ok', |
|||
'100' => '未知错误', |
|||
'101' => '数据不存在', |
|||
'102' => '站点不存在,请联系官方客服授权!!!', |
|||
'200' => 'ok', |
|||
'201' => '添加成功', |
|||
'202' => '添加失败', |
|||
'203' => '修改成功', |
|||
'204' => '修改失败或者没做任何修改', |
|||
'205' => '删除成功', |
|||
'206' => '删除失败', |
|||
'207' => '状态更改成功', |
|||
'208' => '状态更改失败', |
|||
'209' => '保存成功', |
|||
'210' => '保存失败', |
|||
'403' => '很抱歉您没有操作权限,请联系站点管理员!!!', |
|||
'500' => 'error', |
|||
'40500' => '恭喜,登陆成功!!!', |
|||
'40501' => '用户名不正确!!!', |
|||
'40502' => '用户名不存在!!!', |
|||
'40503' => '该用户名已被禁用!!!', |
|||
'40504' => '密码不正确!!!', |
|||
'40505' => '未检测到正确的用户名!!!', |
|||
'40506' => '验证码不正确!!!', |
|||
'40507' => '密码错误次数过多,请半小时后重试或联系管理员!!!', |
|||
'40508' => '您的ip已被禁止访问,请联系管理员!!!', |
|||
'40509' => 'refresh_token已过期', |
|||
'40510' => 'token已过期', |
|||
'40511' => '您没有操作权限请联系站点管理员!!!', |
|||
'40512' => 'token无效或验证失败!!!', |
|||
//短信Api数据字典 |
|||
'40601' => '请输入正确的手机号!!!', |
|||
'40602' => '短信服务商数据不存在或被禁用!!!', |
|||
'40603' => '短信模板不存在或被禁用!!!', |
|||
'40604' => '请输入4位验证码!!!', |
|||
'40605' => '验证码不正确,请重新输入!!!', |
|||
|
|||
//数据库字典 |
|||
'sqlfields' => [ |
|||
'status' => [ |
|||
0 => '禁用', |
|||
1 => '启用', |
|||
], |
|||
'sex' => [ |
|||
1 => '女', |
|||
2 => '男' |
|||
], |
|||
/*栏目类型*/ |
|||
'column_type' => [ |
|||
0 => '列表', |
|||
1 => '单页', |
|||
2 => '外部链接', |
|||
3 => '留言板', |
|||
], |
|||
/*广告类型*/ |
|||
'ad_type' => [ |
|||
0 => '固定广告', |
|||
1 => '幻灯广告', |
|||
2 => '对联广告', |
|||
3 => '漂浮广告', |
|||
], |
|||
|
|||
], |
|||
'upload'=>[ |
|||
'cdn_img_host'=>'http://xxxx.com/' |
|||
], |
|||
|
|||
|
|||
]; |
|||
@ -0,0 +1,24 @@ |
|||
<?php |
|||
|
|||
return [ |
|||
// 默认磁盘 |
|||
'default' => env('filesystem.driver', 'local'), |
|||
// 磁盘列表 |
|||
'disks' => [ |
|||
'local' => [ |
|||
'type' => 'local', |
|||
'root' => app()->getRuntimePath() . 'storage', |
|||
], |
|||
'public' => [ |
|||
// 磁盘类型 |
|||
'type' => 'local', |
|||
// 磁盘路径 |
|||
'root' => app()->getRootPath() . 'public/storage', |
|||
// 磁盘路径对应的外部URL路径 |
|||
'url' => '/storage', |
|||
// 可见性 |
|||
'visibility' => 'public', |
|||
], |
|||
// 更多的磁盘配置信息 |
|||
], |
|||
]; |
|||
@ -0,0 +1,25 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 多语言设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// 默认语言 |
|||
'default_lang' => env('lang.default_lang', 'zh-cn'), |
|||
// 允许的语言列表 |
|||
'allow_lang_list' => [], |
|||
// 多语言自动侦测变量名 |
|||
'detect_var' => 'lang', |
|||
// 是否使用Cookie记录 |
|||
'use_cookie' => true, |
|||
// 多语言cookie变量 |
|||
'cookie_var' => 'think_lang', |
|||
// 扩展语言包 |
|||
'extend_list' => [], |
|||
// Accept-Language转义为对应语言包名称 |
|||
'accept_language' => [ |
|||
'zh-hans-cn' => 'zh-cn', |
|||
], |
|||
// 是否支持语言分组 |
|||
'allow_group' => false, |
|||
]; |
|||
@ -0,0 +1,45 @@ |
|||
<?php |
|||
|
|||
// +---------------------------------------------------------------------- |
|||
// | 日志设置 |
|||
// +---------------------------------------------------------------------- |
|||
return [ |
|||
// 默认日志记录通道 |
|||
'default' => env('log.channel', 'file'), |
|||
// 日志记录级别 |
|||
'level' => [], |
|||
// 日志类型记录的通道 ['error'=>'email',...] |
|||
'type_channel' => [], |
|||
// 关闭全局日志写入 |
|||
'close' => false, |
|||
// 全局日志处理 支持闭包 |
|||
'processor' => null, |
|||
|
|||
// 日志通道列表 |
|||
'channels' => [ |
|||
'file' => [ |
|||
// 日志记录方式 |
|||
'type' => 'File', |
|||
// 日志保存目录 |
|||
'path' => '', |
|||
// 单文件日志写入 |
|||
'single' => false, |
|||
// 独立日志级别 |
|||
'apart_level' => [], |
|||
// 最大日志文件数量 |
|||
'max_files' => 0, |
|||
// 使用JSON格式记录 |
|||
'json' => false, |
|||
// 日志处理 |
|||
'processor' => null, |
|||
// 关闭通道日志写入 |
|||
'close' => false, |
|||
// 日志输出格式化 |
|||
'format' => '[%s][%s] %s', |
|||
// 是否实时写入 |
|||
'realtime_write' => false, |
|||
], |
|||
// 其它日志通道配置 |
|||
], |
|||
|
|||
]; |
|||
@ -0,0 +1,8 @@ |
|||
<?php |
|||
// 中间件配置 |
|||
return [ |
|||
// 别名或分组 |
|||
'alias' => [], |
|||
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行 |
|||
'priority' => [], |
|||
]; |
|||
@ -0,0 +1,45 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 路由设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// pathinfo分隔符 |
|||
'pathinfo_depr' => '/', |
|||
// URL伪静态后缀 |
|||
'url_html_suffix' => 'html', |
|||
// URL普通方式参数 用于自动生成 |
|||
'url_common_param' => true, |
|||
// 是否开启路由延迟解析 |
|||
'url_lazy_route' => false, |
|||
// 是否强制使用路由 |
|||
'url_route_must' => false, |
|||
// 合并路由规则 |
|||
'route_rule_merge' => false, |
|||
// 路由是否完全匹配 |
|||
'route_complete_match' => false, |
|||
// 访问控制器层名称 |
|||
'controller_layer' => 'controller', |
|||
// 空控制器名 |
|||
'empty_controller' => 'Error', |
|||
// 是否使用控制器后缀 |
|||
'controller_suffix' => false, |
|||
// 默认的路由变量规则 |
|||
'default_route_pattern' => '[\w\.]+', |
|||
// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 |
|||
'request_cache' => false, |
|||
// 请求缓存有效期 |
|||
'request_cache_expire' => null, |
|||
// 全局请求缓存排除规则 |
|||
'request_cache_except' => [], |
|||
// 默认控制器名 |
|||
'default_controller' => 'Index', |
|||
// 默认操作名 |
|||
'default_action' => 'index', |
|||
// 操作方法后缀 |
|||
'action_suffix' => '', |
|||
// 默认JSONP格式返回的处理方法 |
|||
'default_jsonp_handler' => 'jsonpReturn', |
|||
// 默认JSONP处理方法 |
|||
'var_jsonp_handler' => 'callback', |
|||
]; |
|||
@ -0,0 +1,19 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 会话设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// session name |
|||
'name' => 'PHPSESSID', |
|||
// SESSION_ID的提交变量,解决flash上传跨域 |
|||
'var_session_id' => '', |
|||
// 驱动方式 支持file cache |
|||
'type' => 'file', |
|||
// 存储连接标识 当type使用cache的时候有效 |
|||
'store' => null, |
|||
// 过期时间 |
|||
'expire' => 1440, |
|||
// 前缀 |
|||
'prefix' => '', |
|||
]; |
|||
@ -0,0 +1,10 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | Trace设置 开启调试模式后有效 |
|||
// +---------------------------------------------------------------------- |
|||
return [ |
|||
// 内置Html和Console两种方式 支持扩展 |
|||
'type' => 'Html', |
|||
// 读取的日志通道名 |
|||
'channel' => '', |
|||
]; |
|||
@ -0,0 +1,25 @@ |
|||
<?php |
|||
// +---------------------------------------------------------------------- |
|||
// | 模板设置 |
|||
// +---------------------------------------------------------------------- |
|||
|
|||
return [ |
|||
// 模板引擎类型使用Think |
|||
'type' => 'Think', |
|||
// 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 |
|||
'auto_rule' => 1, |
|||
// 模板目录名 |
|||
'view_dir_name' => 'view', |
|||
// 模板后缀 |
|||
'view_suffix' => 'html', |
|||
// 模板文件名分隔符 |
|||
'view_depr' => DIRECTORY_SEPARATOR, |
|||
// 模板引擎普通标签开始标记 |
|||
'tpl_begin' => '{', |
|||
// 模板引擎普通标签结束标记 |
|||
'tpl_end' => '}', |
|||
// 标签库标签开始标记 |
|||
'taglib_begin' => '{', |
|||
// 标签库标签结束标记 |
|||
'taglib_end' => '}', |
|||
]; |
|||
@ -0,0 +1,108 @@ |
|||
<?php |
|||
|
|||
use think\migration\Migrator; |
|||
use Phinx\Db\Adapter\AdapterFactory; |
|||
|
|||
class CreateRulesTable extends Migrator |
|||
{ |
|||
/** |
|||
* Initialize method. |
|||
* |
|||
* @return void |
|||
*/ |
|||
protected function init() |
|||
{ |
|||
$options = $this->getDbConfig(); |
|||
|
|||
$adapter = AdapterFactory::instance()->getAdapter($options['adapter'], $options); |
|||
|
|||
if ($adapter->hasOption('table_prefix') || $adapter->hasOption('table_suffix')) { |
|||
$adapter = AdapterFactory::instance()->getWrapper('prefix', $adapter); |
|||
} |
|||
|
|||
$this->setAdapter( $adapter); |
|||
} |
|||
|
|||
/** |
|||
* 获取数据库配置 |
|||
* @return array |
|||
*/ |
|||
protected function getDbConfig(): array |
|||
{ |
|||
$default = config('tauthz.database.connection') ?: config('database.default'); |
|||
|
|||
$config = config("database.connections.{$default}"); |
|||
|
|||
if (0 == $config['deploy']) { |
|||
$dbConfig = [ |
|||
'adapter' => $config['type'], |
|||
'host' => $config['hostname'], |
|||
'name' => $config['database'], |
|||
'user' => $config['username'], |
|||
'pass' => $config['password'], |
|||
'port' => $config['hostport'], |
|||
'charset' => $config['charset'], |
|||
'table_prefix' => $config['prefix'], |
|||
]; |
|||
} else { |
|||
$dbConfig = [ |
|||
'adapter' => explode(',', $config['type'])[0], |
|||
'host' => explode(',', $config['hostname'])[0], |
|||
'name' => explode(',', $config['database'])[0], |
|||
'user' => explode(',', $config['username'])[0], |
|||
'pass' => explode(',', $config['password'])[0], |
|||
'port' => explode(',', $config['hostport'])[0], |
|||
'charset' => explode(',', $config['charset'])[0], |
|||
'table_prefix' => explode(',', $config['prefix'])[0], |
|||
]; |
|||
} |
|||
|
|||
$table = config('database.migration_table', 'migrations'); |
|||
|
|||
$dbConfig['default_migration_table'] = $dbConfig['table_prefix'] . $table; |
|||
|
|||
return $dbConfig; |
|||
} |
|||
|
|||
/** |
|||
* Change Method. |
|||
* |
|||
* Write your reversible migrations using this method. |
|||
* |
|||
* More information on writing migrations is available here: |
|||
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class |
|||
* |
|||
* The following commands can be used in this method and Phinx will |
|||
* automatically reverse them when rolling back: |
|||
* |
|||
* createTable |
|||
* renameTable |
|||
* addColumn |
|||
* renameColumn |
|||
* addIndex |
|||
* addForeignKey |
|||
* |
|||
* Remember to call "create()" or "update()" and NOT "save()" when working |
|||
* with the Table class. |
|||
*/ |
|||
public function up() |
|||
{ |
|||
$default = config('tauthz.default'); |
|||
$table = $this->table(config('tauthz.enforcers.'.$default.'.database.rules_name')); |
|||
$table->addColumn('ptype', 'string', ['null' => true]) |
|||
->addColumn('v0', 'string', ['null' => true]) |
|||
->addColumn('v1', 'string', ['null' => true]) |
|||
->addColumn('v2', 'string', ['null' => true]) |
|||
->addColumn('v3', 'string', ['null' => true]) |
|||
->addColumn('v4', 'string', ['null' => true]) |
|||
->addColumn('v5', 'string', ['null' => true]) |
|||
->create(); |
|||
} |
|||
|
|||
public function down() |
|||
{ |
|||
$default = config('tauthz.default'); |
|||
$table = $this->table(config('tauthz.enforcers.'.$default.'.database.rules_name')); |
|||
$table->drop(); |
|||
} |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue