feat(ui): 查标第 6 步前端补齐
Some checks failed
ci / server (push) Has been cancelled
ci / web (push) Has been cancelled
ci / contract (push) Has been cancelled

- 读标页:每条清单项写最近一次检查的结论,点投标侧出处看投标原文;
  「已响应」也能反馈判断有误(漏报);证书要求写资质库里的情况
  (新接口 GET /projects/{id}/qualification-matches,资质库空时不写)
- 概览:检查记录卡(历次检查、各级问题数、报告下载)、文件卡
- 工作台:「致命」列、统计可点筛选、待处理的致命问题卡(?f= 定位到问题)
- 日期输入加日历弹层(DateInput,Reka UI Calendar)
- 查标页:? 键显示快捷键说明;反馈对话框抽成 FeedbackDialog 共用
- 扫描件提示去掉多余空格

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-05 13:39:19 +08:00
parent 808259da87
commit 54cbb556d0
30 changed files with 956 additions and 143 deletions

View File

@@ -1257,6 +1257,39 @@ paths:
application/json:
schema: { $ref: '#/components/schemas/CheckPreview' }
/projects/{project_id}/qualification-matches:
parameters:
- $ref: '#/components/parameters/ProjectId'
get:
tags: [checks]
operationId: listQualificationMatches
summary: 读标清单上的资质库情况(qualification-plan §4,第 6 步)
description: |
正式清单里资格条件、评分项中认出证书类别的条目,每类给出资质库里有效期最晚的一条,按投标截止日判断是否过期
(没有截止时间按今天)。认类别、排除产品和人员证书的口径和查标一样;资质库是空的时 items 为空(QL3)。
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required: [as_of, by_deadline, items]
properties:
as_of: { type: string, format: date, description: 按哪天判断有效期 }
by_deadline: { type: boolean, description: as_of 是投标截止日(false 时是今天) }
items:
type: array
items:
type: object
required: [checklist_item_id, families]
properties:
checklist_item_id: { $ref: '#/components/schemas/Id' }
families:
type: array
items: { $ref: '#/components/schemas/QualificationMatch' }
'404': { $ref: '#/components/responses/NotFound' }
/projects/{project_id}/check-runs:
parameters:
- $ref: '#/components/parameters/ProjectId'
@@ -1997,6 +2030,27 @@ components:
QuotaEntryKind: { type: string, enum: [grant, hold, settle, release, expire, adjust, waive] }
PlanCode: { type: string, enum: [free, pro, enterprise] }
QualificationKind: { type: string, enum: [certificate, system_cert, software_copyright, other] }
QualificationMatch:
type: object
description: 一类证书在资质库里的情况(读标页用)
required: [family, count, record, state]
properties:
family: { type: string, examples: [ISO 9001 质量管理体系认证] }
count: { type: integer, description: 资质库里这一类有几条 }
state: { type: string, enum: [valid, expired, missing], description: 按 as_of 判断;missing 是资质库里没有这一类 }
record:
description: 有效期最晚的一条;没有时为 null
oneOf:
- type: 'null'
- type: object
required: [id, name, kind, valid_to]
properties:
id: { $ref: '#/components/schemas/Id' }
name: { type: string }
kind: { $ref: '#/components/schemas/QualificationKind' }
level: { type: [string, 'null'] }
cert_no: { type: [string, 'null'] }
valid_to: { type: [string, 'null'], format: date, description: 'null 表示长期有效' }
ProjectFieldKey:
type: string
enum: [name, code, purchaser, agency, procurement_method, legal_regime, budget_total, ceiling_total,