feat: 实现后台请求兼容接口的模式

This commit is contained in:
augushong
2025-03-10 18:06:51 +08:00
parent afd5f6b1dd
commit 7f92b0e07a
6 changed files with 119 additions and 9 deletions

View File

@@ -3,6 +3,7 @@ APP_DEBUG=true
[APP]
DEFAULT_TIMEZONE=Asia/Shanghai
AUTO_CACHE_LOG=false
AUTO_PARSE_API=true
[DATABASE]
TYPE=mysql

View File

@@ -43,4 +43,6 @@ return [
'show_error_msg' => false,
// 静态资源上传到OSS前缀
'oss_static_prefix' => Env::get('adminsystem.oss_static_prefix', 'static_ulthon_admin'),
// 自动兼容接口响应
'auto_parse_api' => Env::get('app.auto_parse_api', true),
];

View File

@@ -17,7 +17,7 @@ abstract class BaseControllerBase
{
/**
* Request实例.
* @var \think\Request
* @var \app\common\provider\Request
*/
protected $request;

View File

@@ -44,7 +44,7 @@ class AdminBase extends AdminController
*/
public function index()
{
if ($this->request->isAjax()) {
if ($this->request->isJson()) {
if (input('selectFields')) {
return $this->selectList();
}

View File

@@ -6,9 +6,11 @@ use app\admin\model\SystemAdmin;
use app\BaseController;
use app\common\constants\AdminConstant;
use app\common\service\AuthService;
use think\facade\Config;
use think\facade\Env;
use think\facade\View;
use think\Model;
use think\response\Json;
use think\template\exception\TemplateNotFoundException;
use think\Validate;
@@ -86,6 +88,8 @@ class AdminControllerBase extends BaseController
*/
private $dataBrage = [];
private $internalDataFields = [];
protected $validateRule = null;
protected $validateMessage = [];
@@ -140,8 +144,23 @@ class AdminControllerBase extends BaseController
*/
public function assign($name, $value = null, $isAppendToDataBrage = false, $forceObject = false)
{
if ($isAppendToDataBrage) {
$this->setDataBrage($name, $value, $forceObject);
if (is_array($name)) {
$forceObject = $isAppendToDataBrage;
$isAppendToDataBrage = $value;
if ($isAppendToDataBrage === true) {
foreach ($name as $k => $v) {
$this->setDataBrage($k, $v, $forceObject);
}
} elseif ($isAppendToDataBrage === -1) {
$this->internalDataFields = array_merge($this->internalDataFields, array_keys($name));
}
} else {
if ($isAppendToDataBrage === true) {
$this->setDataBrage($name, $value, $forceObject);
} elseif ($isAppendToDataBrage === -1) {
$this->internalDataFields[] = $name;
}
}
return $this->app->view->assign($name, $value);
@@ -181,8 +200,7 @@ class AdminControllerBase extends BaseController
public function fetch($template = '', $vars = [])
{
$this->assign('data_brage', json_encode($this->dataBrage));
$vars['content_js'] = $this->fetchJS($template);
$this->assign('content_js', $this->fetchJS($template), -1);
$content_main = View::layout($this->layout)
->config([
@@ -191,10 +209,56 @@ class AdminControllerBase extends BaseController
$html = '';
$html .= $content_main;
if ($this->checkParseApi()) {
$data = $this->parseInternalDataFields(View::fetchData());
$r = json_message($data);
return $r;
}
return $html;
}
public function checkParseApi()
{
if (Config::get('app.auto_parse_api')) {
if ($this->request->isJsonPure() && $this->request->param('get_page_data')) {
return true;
}
}
return false;
}
/**
* 处理数据,过滤内部字段.
* @param array $data 内部数据
* @return array
*/
public function parseInternalDataFields($data)
{
foreach ($this->internalDataFields as $field) {
if (isset($data[$field])) {
unset($data[$field]);
}
}
if (isset($data['data_brage'])) {
$data_brage = json_decode($data['data_brage'], true);
// 如果data_brage中的key在data中存在则删掉data_brage中的
foreach ($data as $key => $value) {
if (isset($data_brage[$key])) {
unset($data_brage[$key]);
}
}
$data['data_brage'] = $data_brage;
}
return $data;
}
/**
* 设置dataBrage数据.
*
@@ -205,6 +269,14 @@ class AdminControllerBase extends BaseController
*/
public function setDataBrage($name, $value, $forceObject = false)
{
if (is_array($name)) {
foreach ($name as $k => $v) {
$this->setDataBrage($k, $v, $forceObject);
}
return $this;
}
if ($forceObject && !is_object($value)) {
$value = (object) $value;
}
@@ -339,7 +411,7 @@ class AdminControllerBase extends BaseController
/**
* 下拉选择列表.
* @return \think\response\Json
* @return Json
*/
public function selectList()
{
@@ -378,7 +450,7 @@ class AdminControllerBase extends BaseController
'pageKeyName' => $this->pageKeyName,
];
View::assign($data);
$this->assign($data, -1);
}
/**
@@ -443,7 +515,7 @@ class AdminControllerBase extends BaseController
$this->sessionAdmin = $model_admin;
$this->assign('session_admin', $model_admin);
$this->assign('session_admin', $model_admin, -1);
}
/**

View File

@@ -2,8 +2,43 @@
namespace base\common\provider;
use think\facade\Config;
// 应用请求对象类
class RequestBase extends \think\Request
{
protected $filter = [];
/**
* 当前是否JSON请求
* @return bool
*/
public function isJson(): bool
{
$acceptType = $this->type();
$is_json = str_contains($acceptType, 'json');
if (!$is_json) {
return false;
}
if (!Config::get('app.auto_parse_api')) {
return true;
}
if ($this->has('get_page_data')) {
return false;
}
return true;
}
/**
* 仅通过实际请求参数判断请求
*
* @return bool
*/
public function isJsonPure()
{
return parent::isJson();
}
}