diff --git a/app/controller/Crawler.php b/app/controller/Crawler.php index 51bcc11..29c916c 100644 --- a/app/controller/Crawler.php +++ b/app/controller/Crawler.php @@ -280,20 +280,11 @@ class Crawler extends BaseController } $treeData = $service->getPositionTree($dsdm, $examid, $bmid, $userid, (string)$aa, $cookies); - - // 提取所有CODE作为zwdm - $zwdmList = []; - if (is_array($treeData)) { - foreach ($treeData as $item) { - if (isset($item['CODE']) && !empty($item['CODE'])) { - $zwdmList[] = [ - 'zwdm' => $item['CODE'], - 'title' => $item['TITLE'] ?? $item['CODE'], - ]; - } - } - } - + + $zwdmList = is_array($treeData) + ? $service->collectPositionListExcludingNocheck($treeData) + : []; + return json([ 'code' => 1, 'data' => $zwdmList, diff --git a/app/service/CrawlerService.php b/app/service/CrawlerService.php index 766eb93..10a07eb 100644 --- a/app/service/CrawlerService.php +++ b/app/service/CrawlerService.php @@ -196,6 +196,38 @@ class CrawlerService return $codes; } + /** + * 从职位树数据中收集可爬取的职位列表(排除 nocheck: true 的节点),用于下拉/勾选展示 + * @param array $treeData getPositionTree 的返回值 + * @return array[] 每项为 [ 'zwdm' => CODE, 'title' => TITLE ] + */ + public function collectPositionListExcludingNocheck(array $treeData): array + { + $list = []; + $nodes = $treeData; + if (isset($treeData['data']) && is_array($treeData['data'])) { + $nodes = $treeData['data']; + } elseif (isset($treeData['tree']) && is_array($treeData['tree'])) { + $nodes = $treeData['tree']; + } + foreach ($nodes as $item) { + if (!is_array($item)) { + continue; + } + $nocheck = $item['nocheck'] ?? $item['noCheck'] ?? null; + if ($nocheck === true || $nocheck === 1 || (is_string($nocheck) && strtolower($nocheck) === 'true')) { + continue; + } + if (isset($item['CODE']) && $item['CODE'] !== '') { + $list[] = [ + 'zwdm' => $item['CODE'], + 'title' => $item['TITLE'] ?? $item['CODE'], + ]; + } + } + return $list; + } + /** * 获取职位详细信息 * @param string $zwdm 职位代码 diff --git a/view/crawler/index.html b/view/crawler/index.html index f4bead5..d896df6 100644 --- a/view/crawler/index.html +++ b/view/crawler/index.html @@ -836,13 +836,10 @@ continue; } - // 过滤掉152开头的职位代码 - const codes = listResp.data - .map(it => it.zwdm) - .filter(code => !code.startsWith('152')); - + // 后端已排除 nocheck: true 的节点,直接使用返回的职位代码 + const codes = listResp.data.map(it => it.zwdm); totalCodes += codes.length; - showMessage('result-message', `地区 ${dsdm}: 共 ${codes.length} 个职位(已跳过152开头),开始逐条获取...`, 'info'); + showMessage('result-message', `地区 ${dsdm}: 共 ${codes.length} 个职位,开始逐条获取...`, 'info'); // 逐条获取职位详情 for (let i = 0; i < codes.length; i++) {