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

@@ -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);
}
/**