From cff4938671206af897ddcd0284876bcd529ac086 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Wed, 12 Mar 2025 17:31:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E9=A2=9D?= =?UTF-8?q?=E5=A4=96=E9=85=8D=E7=BD=AE=E9=A1=B9=E8=81=94=E5=8A=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/validate/v1/SysConfigValidate.php | 53 ++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/app/admin/validate/v1/SysConfigValidate.php b/app/admin/validate/v1/SysConfigValidate.php index 8ed95d18..2cea8afc 100644 --- a/app/admin/validate/v1/SysConfigValidate.php +++ b/app/admin/validate/v1/SysConfigValidate.php @@ -3,6 +3,7 @@ declare (strict_types = 1); namespace app\admin\validate\v1; +use app\admin\model\v1\SysConfigModel; use think\Validate; class SysConfigValidate extends Validate @@ -19,7 +20,7 @@ class SysConfigValidate extends Validate 'title' => 'require|max:64', 'name' => 'require|unique:sys_config|max:64', 'value' => 'max:255', - 'extra' => 'max:255', + 'extra' => 'max:255|checkLinkage', 'type' => 'max:64', 'sort' => 'integer', 'remark' => 'max:255' @@ -53,4 +54,54 @@ class SysConfigValidate extends Validate { return $this->remove('id', 'require|integer'); } + + // 验证额外配置项中联动数据配置 + protected function checkLinkage($value, $rule, $data) + { + if (empty($value)) { + return true; + } + + $submit_linkage_names = []; + $submit_extra = explode(PHP_EOL, $value); + foreach ($submit_extra as $v) { + if (preg_match('/^([^:]+):(.*?)(?:\[(.*?)\])?$/i', trim($v), $match)) { + if (isset($match[3])) { + $submit_linkage_names = array_merge($submit_linkage_names, array_map(function ($it) { + return str_replace(['"', "'"], '', trim($it)); + }, explode(',', $match[3]))); + } + } + } + + $configs_extra = SysConfigModel::whereNotNull('extra') + ->where('extra', '<>', '') + ->where(function($query) use($data) { + if (isset($data['id'])) { + $query->where('id', '<>', $data['id']); + } + }) + ->column('extra'); + $exists_linkage_names = []; + foreach ($configs_extra as $it) { + $exists_extra = explode(PHP_EOL, $it); + foreach ($exists_extra as $v) { + if (preg_match('/^([^:]+):(.*?)(?:\[(.*?)\])?$/i', trim($v), $match)) { + if (isset($match[3])) { + $exists_linkage_names = array_merge($exists_linkage_names, array_map(function ($it) { + return str_replace(['"', "'"], '', trim($it)); + }, explode(',', $match[3]))); + } + } + } + } + + $intersect = array_intersect($submit_linkage_names, $exists_linkage_names); + if (!empty($intersect)) { + $v = implode(',', $intersect); + return "{$v}被多次设为联动配置项"; + } + + return true; + } }