v1.0.35: 重复校验支持多字段同时提示 - 校验引擎改收集模式返回全部重复,Response::duplicates单弹窗列出,前端遍历展示所有重复项

This commit is contained in:
nanguaboss
2026-08-09 22:38:35 +08:00
parent 5179a51967
commit 2587c55ab6
12 changed files with 72 additions and 57 deletions
+13 -14
View File
@@ -177,16 +177,17 @@ function findDuplicate(PDO $pdo, $type, $value, $excludeIds = [], $platform = nu
}
/**
* 校验单条账号(媒体模块扁平字段)
* 校验单条账号(媒体模块扁平字段),返回所有重复项数组(空=无重复)
* @param PDO $pdo
* @param string $platform
* @param string $accountId
* @param string $profileUrl
* @param array $excludeIds
* @return array|null
* @return array
*/
function checkSingleAccountDuplicate(PDO $pdo, $platform, $accountId, $profileUrl = '', $excludeIds = [])
{
$dups = [];
$platform = trim((string)$platform);
$accountId = trim((string)$accountId);
if ($platform !== '' && $accountId !== '') {
@@ -196,45 +197,43 @@ function checkSingleAccountDuplicate(PDO $pdo, $platform, $accountId, $profileUr
$dup = findDuplicate($pdo, 'account_id', $accountId, $excludeIds, $platform);
}
if ($dup) {
return $dup;
$dups[] = $dup;
}
}
$profileUrl = trim((string)$profileUrl);
if ($profileUrl !== '') {
$dup = findDuplicate($pdo, 'profile_url', $profileUrl, $excludeIds);
if ($dup) {
return $dup;
$dups[] = $dup;
}
}
return null;
return $dups;
}
/**
* 校验联系方式数组(persons/companies 的 contacts/accounts JSON)
* 校验联系方式数组(persons/companies 的 contacts/accounts JSON),返回所有重复项数组(空=无重复)
* @param PDO $pdo
* @param array $accounts [{platform,account_id,profile_url,...}]
* @param array $excludeIds 整表替换时排除自身既有账号ID
* @return array|null
* @return array
*/
function checkAccountsDuplicates(PDO $pdo, $accounts, $excludeIds = [])
{
$dups = [];
if (!is_array($accounts)) {
return null;
return $dups;
}
foreach ($accounts as $a) {
if (!is_array($a)) {
continue;
}
$dup = checkSingleAccountDuplicate(
$dups = array_merge($dups, checkSingleAccountDuplicate(
$pdo,
$a['platform'] ?? '',
$a['account_id'] ?? '',
$a['profile_url'] ?? '',
$excludeIds
);
if ($dup) {
return $dup;
}
));
}
return null;
return $dups;
}
+12 -2
View File
@@ -31,10 +31,20 @@ class Response
*/
public static function duplicate($dup)
{
self::duplicates([$dup]);
}
/**
* 多条重复数据错误(一次录入多个字段均重复时,单弹窗全部列出)
* @param array $dups 重复记录数组
*/
public static function duplicates($dups)
{
$dups = array_values((array)$dups);
self::json([
'code' => 1001,
'msg' => ($dup['label'] ?? '字段') . '「' . ($dup['value'] ?? '') . '」出现重复',
'data' => $dup,
'msg' => count($dups) . ' 个字段出现重复',
'data' => $dups,
]);
}