{{scope.row.task_name}}
{{scope.row.title}}
🤖 {{scope.row.summary}}
查看
📎 {{ scope.row.attachment_count }}
已下线
详情
失败
重试
保存
{{ scope.row.publish_at || scope.row.publish_date || '-' }}
{{ scope.row.display_name }}
{{ scope.row.task_name }}
+{{ scope.row.dup_count }} 个学院同发
已合并到 #{{ scope.row.duplicate_of }}
已导出
原文
抓取 {{ formatTime(scope.row.crawled_at) }}
依据:{{ scope.row.deadline_text }}
(手工修改)
{{ scope.row.error }}
{{ scope.row.deadline || '待定' }}
{{ {pdf:'PDF', docx:'Word', page:'网页'}[scope.row.source_kind] }}
{{ {ok:'已整理', failed:'失败', rejected:'非竞赛', ignored:'已移除', duplicate:'重复', pending:'处理中'}[scope.row.status] || scope.row.status }}
查看
下载
{{ scope.row.status === 'ok' ? '重新生成' : '重试' }}
移除
{{scope.row.task_name}}
{{scope.row.title}}
🤖 {{scope.row.summary}}
查看
📎 {{ scope.row.attachment_count }}
已下线
详情
失败
重试
保存
{{ scope.row.publish_at || scope.row.publish_date || '-' }}
新建任务
刷新列表
{{scope.row.frequency}} 分
{{ formatTime(scope.row.last_run_time) }}
编辑
运行
删除
刷新日志
开启实时推送
开启每日汇总
内容快照
发现新通知时保存原文网页、正文和附件
发现竞赛通知时自动整理(AI 提取报名截止日期,原文转图片,归集附件)
{{ reclassify.running ? `AI 分类中 ${reclassify.done}/${reclassify.total}` : '用 AI 重新分类全部通知' }}
新通知抓取时会自动用 AI 判定“保研 / 日常”(竞赛单独判定)。此处可对历史通知重新分类,例如成绩排名公示会被识别为保研。
已分类 {{ reclassify.done }} 条:保研 {{ reclassify.baoyan }},日常 {{ reclassify.daily }}。
已保存 {{ snapStats.ok }} / {{ snapStats.total }} 条通知
(其中 {{ snapStats.gone }} 条保存时原文已下线),
未快照 {{ snapStats.pending }} 条,失败 {{ snapStats.failed }} 条
附件 {{ snapStats.attachments }} 个,磁盘占用 {{ formatSize(snapStats.disk_bytes) }}
({{ snapStats.dir }})
对外 API
启用对外 API(关闭后所有 /api/ 请求返回 403,凡科导出已内置,一般不需要开)
复制
重新生成
供其它系统拉取竞赛整理结果。认证方式:请求头 X-API-Key: 上面的值,或 URL 加 ?key=上面的值。
列表:GET /api/competitions 详情(名称+原文图片+全部附件):GET /api/competitions/{id} 整包下载:GET /api/competitions/{id}/download
返回里的图片、附件 URL 已自动带上 key,可直接下载。重新生成后旧 key 立即失效。
邮件服务器
保存配置
测试邮件
{{ comp.display_name }}
复制名称
保存
改后名称同步更新
{{ comp.deadline_text || '(正文里没找到明确的报名截止)' }}
{{ comp.task_name }}
{{ {pdf:'PDF 附件', docx:'Word 附件', page:'网页正文'}[comp.source_kind] || '-' }}
({{ comp.source_file }})
{{ comp.url }}
下载整包 (zip)
重新生成
其他学院同发的同一竞赛 ({{ comp.duplicates.length }})
通知原文图片 ({{ comp.images.length }})
附件 ({{ comp.files.length }})
该通知没有附件
{{ s.row.name }}
当前勾选的 {{ compSelectedIds.length }} 条
最新
条(按通知发布日期由近及远)
还没导出过的 {{ fanke.unexported }} 条(增量)
zip 内文件名编码:
UTF-8(默认)
GBK
UTF-8 是 zip 标准写法:凡科导入、Mac、7-Zip / Bandizip / WinRAR 5+ 、新版 Windows 都正常。
若你在 Windows 用系统自带解压或旧版 WinRAR 打开后中文乱码,选 GBK(文件名后缀会带 -GBK 便于区分)。
生成规则:正文 = 通知原文图片(每篇 ≤20 张,超出自动拼接);封面 = 第一张图;附件全部放入 files/;
标题 = 通知原标题(不含报名截止日期);摘要 = “报名截止 YYYY年MM月DD日”;发布时间 = 通知发布日 00:00;单包超 450MB 自动拆成多个 zip。
只生成 zip,不会自动上传凡科,请到凡科后台「图文 → 批量导入」手动上传。
取消
开始生成
只保留最近 20 个批次 / 30 天内的包,之后自动清理。
{{ formatTime(s.row.created_at) }}
{{ {selected:'勾选', latest:'最新', unexported:'增量'}[s.row.mode] || s.row.mode }}
{{ (s.row.filename_encoding || 'utf8').toUpperCase() }}
{{ {ok:'完成', failed:'失败', running:'生成中'}[s.row.status] }}
{{ s.row.parts.length > 1 ? `第${i+1}包` : '下载' }} ({{ p.count }}条, {{ formatSize(p.size) }})
{{ s.row.error }}
删除
搜索
添加
手动添加不经过 AI 判断是否竞赛,但仍会自动提取报名截止日期;处理需要几秒钟。
{{ snap.title }}
{{ snap.task_name }}
{{ snap.publish_date || '-' }}
{{ {ok:'已保存', gone:'原文已下线', failed:'失败'}[snap.snapshot_status] || '未快照' }}
{{ snap.snapshot_error }}
{{ formatTime(snap.snapshot_at) }}
{{ snap.url }}
打开网页快照
原始 HTML
重新快照
附件 / 图片 ({{ snap.attachments.length }})
{{ s.row.file_name }}
{{ s.row.file_name }}
{{ nameSourceTag(s.row.name_source).text }}
{{ s.row.kind==='image'?'图片':'附件' }}
{{ s.row.status==='ok' ? formatSize(s.row.size) : '-' }}
已保存
下载失败
原链接
正文
{{ snap.content_text || (snap.snapshot_status==='gone' ? '(保存时原文已下线,未能获取正文)' : '(未提取到正文)') }}
抓取规则 (CSS Selector)
快照时从这个容器提取正文和附件;这是详情页的选择器,不是列表页的。
新任务第一次运行会把列表页上已有的通知静默入库(做快照、生成摘要,但不发邮件、不进日报),之后再出现的才算新通知。
取消
保存