refactor: 修改处理配置附加项
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace app\admin\controller\v1;
|
namespace app\admin\controller\v1;
|
||||||
@@ -58,12 +59,7 @@ class SiteConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 处理附加配置项及联动项
|
// 处理附加配置项及联动项
|
||||||
$config_name_map = [];
|
$configs = $this->handleExtra($configs);
|
||||||
foreach ($configs as $config) {
|
|
||||||
unset($config['group_id']);
|
|
||||||
$config_name_map[$config['name']] = $config;
|
|
||||||
}
|
|
||||||
$configs = $this->handleExtra($configs, $config_name_map);
|
|
||||||
|
|
||||||
// 组合数据
|
// 组合数据
|
||||||
$config_group_map = [];
|
$config_group_map = [];
|
||||||
@@ -82,50 +78,66 @@ class SiteConfig
|
|||||||
return success('获取成功', $groups);
|
return success('获取成功', $groups);
|
||||||
}
|
}
|
||||||
// 处理配置联动项数据
|
// 处理配置联动项数据
|
||||||
private function handleExtra($data, $map)
|
private function handleExtra($data)
|
||||||
{
|
{
|
||||||
$ret = [];
|
list($list, $map) = $this->parseExtra($data);
|
||||||
$need_delete_names = [];
|
return $this->buildExtra($list, $map);
|
||||||
foreach ($data as $val) {
|
}
|
||||||
|
private function parseExtra($data)
|
||||||
|
{
|
||||||
|
$linkage_names = [];
|
||||||
|
foreach ($data as &$val) {
|
||||||
if (!empty($val['extra'])) {
|
if (!empty($val['extra'])) {
|
||||||
$extra = explode(PHP_EOL, $val['extra']);
|
$extra = explode(PHP_EOL, $val['extra']);
|
||||||
|
$val['extra'] = [];
|
||||||
foreach ($extra as $v) {
|
foreach ($extra as $v) {
|
||||||
if (preg_match('/^([^:]+):(.+)\[(.+)\]$/i', $v, $match)) {
|
if (preg_match('/^([^:]+):(.+)\[(.+)\]$/i', $v, $match)) {
|
||||||
$item = [
|
$item = [
|
||||||
'name' => $match[2],
|
'name' => $match[2],
|
||||||
'value' => $match[1]
|
'value' => $match[1],
|
||||||
|
'linkage_names' => array_map(function ($it) {
|
||||||
|
return trim(trim($it), "'");
|
||||||
|
}, explode(',', $match[3]))
|
||||||
];
|
];
|
||||||
if (isset($match[3])) {
|
$linkage_names = array_merge($linkage_names, $item['linkage_names']);
|
||||||
|
$val['extra'][] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($val);
|
||||||
|
|
||||||
|
$linkage_data = [];
|
||||||
|
foreach ($data as $key => $val) {
|
||||||
|
if (in_array($val['name'], $linkage_names)) {
|
||||||
|
$linkage_data[$val['name']] = $val;
|
||||||
|
unset($data[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$data, $linkage_data];
|
||||||
|
}
|
||||||
|
private function buildExtra($data, $linkage_data)
|
||||||
|
{
|
||||||
|
$ret = [];
|
||||||
|
foreach ($data as $val) {
|
||||||
|
if (!empty($val['extra'])) {
|
||||||
|
foreach ($val['extra'] as &$v) {
|
||||||
|
$linkage_names = $v['linkage_names'];
|
||||||
|
unset($v['linkage_names']);
|
||||||
$children = [];
|
$children = [];
|
||||||
$names = explode(',', $match[3]);
|
foreach ($linkage_names as $name) {
|
||||||
foreach ($names as $name) {
|
if (!empty($linkage_data[$name])) {
|
||||||
$name = trim(trim($name), "'");
|
$children[] = $linkage_data[$name];
|
||||||
$need_delete_names[] = $name;
|
|
||||||
if (!empty($map[$name])) {
|
|
||||||
$children[] = $map[$name];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 处理子级
|
$v['children'] = $this->handleExtra($children);
|
||||||
if (!empty($children)) {
|
|
||||||
$item['children'] = $this->handleExtra($children, $map);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
unset($val['extra']);
|
|
||||||
if (!isset($val['extras'])) {
|
|
||||||
$val['extras'] = [];
|
|
||||||
}
|
|
||||||
$val['extras'][] = $item;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
unset($v);
|
||||||
}
|
}
|
||||||
$ret[] = $val;
|
$ret[] = $val;
|
||||||
}
|
}
|
||||||
// 删除多余的配置项
|
|
||||||
foreach ($ret as $k => $it) {
|
|
||||||
if (in_array($it['name'], $need_delete_names)) {
|
|
||||||
unset($ret[$k]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user