Commit Graph

482 Commits

Author SHA1 Message Date
PingChuan 5bee9288b9 feat:替换 Dify 为自建 RAG去实现
1、修复了若干无权限时的失败提示语
2、新增了一个生成后续建议问题的功能
3、重构了知识问答部分的权限管理模块
4、修复了若干渲染不恰当的样式渲染
2026-04-10 16:20:32 +08:00
TanWenyan f525707358 feat(rules): VLM 字段补齐多实体逐字段开关,对齐 LLM 字段行为
- 多实体总开关开启后,VLM 字段可点击单独切换 multi_entity(绿色=已开启)
- 新增 VLM 字段时默认写入 multi_entity: false
- 删除按钮 stopPropagation 避免触发多实体切换

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:12:17 +08:00
TanWenyan cd852ee721 fix(frontend): guard response.error.includes against non-string error values
If the API returns a non-string error (e.g. numeric HTTP status code),
calling .includes() directly on it throws "N.includes is not a function".
Convert to string via JSON.stringify first.

Fixes save button crash on rules/new page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 17:32:21 +08:00
TanWenyan aec34d139a fix(frontend): comprehensive defensive guards in ReviewSettings
Multiple locations in ReviewSettings.tsx call .includes() or .filter()
on variables that could theoretically be non-arrays:

1. availableFields.filter/.includes - added safeAvailableFields guard
2. newFields.map field.includes('_') - added typeof===string guard + filter
3. (prior fix) cfgAvailableFields includes/every in renderRuleConfig
4. (prior fix) selectedFields includes in renderFieldTags

These prevent TypeError crashes when config objects contain unexpected
types (e.g. {} instead of []) from stale API data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 17:29:21 +08:00
TanWenyan 804e24eff9 fix(frontend): guard availableFields.includes in renderRuleConfig
config.availableFields may be undefined or a non-array value (e.g. {}),
causing TypeError when calling .includes/.every directly on it.
Precompute cfgAvailableFields with Array.isArray guard before use.

Fixes: N.includes is not a function on rules/new page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 17:04:10 +08:00
TanWenyan a8949d9abf fix(frontend): guard against non-array selectedFields in renderFieldTags
When config.fields is a non-array value (e.g. empty object {}),
the fallback logic could still result in a non-array if both
config.fields and config.selectedFields are abnormal values.
Added double-guard: after the fallback chain, explicitly assert
Array.isArray before using selectedFields.includes().

Fixes: TypeError: _.includes is not a function on rules/new page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 16:59:24 +08:00
TanWenyan 64893e7dad fix: processFieldName handles object fields ({name, multi_entity}) format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:11:04 +08:00
TanWenyan d226ada0fe fix(ui): use inline style for multi-entity green background to override ant-btn
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:25:03 +08:00
TanWenyan 623cf8c427 fix(ui): match extraction field chips with review settings style, green only for multi-entity
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:20:32 +08:00
TanWenyan 9d6a5364bb fix(ui): use inline tailwind for field chips instead of scoped CSS class
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:16:59 +08:00
TanWenyan 95351893c6 fix(ui): compact multi-entity field chips to match tag-button size
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:04:21 +08:00
TanWenyan bc3e26c93e feat(frontend): field-level multi_entity toggle in extraction settings
- evaluation_points.ts: LLMFieldConfig type, LLMFieldType union,
  VLMField.multi_entity
- ExtractionSettings.tsx:
  - LLM fields render as colored buttons (green=multi_entity, gray=normal)
  - Click to toggle individual field multi_entity when switch is on
  - Toggle switch on: converts all string fields to {name, multi_entity:true}
  - Toggle switch off: converts back to plain strings
  - New fields default to multi_entity:true when switch is on

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:34:45 +08:00
TanWenyan 5d3cb2ba34 fix: unwrap PostgREST proxy response format for pointCode 2026-03-23 20:56:27 +08:00
TanWenyan 138cb5c606 fix: fetch pointCode directly via PostgREST in route loader
Vite tree-shakes pointCode from intermediate data objects. Fix by
querying evaluation_points.code directly in the route loader with
postgrestGet, then patching pointCode onto reviewPoints before
returning to the client. Works for both legacy and GraphRAG paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:49:45 +08:00
TanWenyan 2694eeb011 fix: bypass Vite tree-shake for pointCode via pointCodeMap
Vite's SSR build strips pointCode from ReviewPointResult return objects.
Workaround: pass a separate pointCodeMap from reviews.ts and apply it
in the route loader (reviews.tsx) which Vite preserves.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:39:08 +08:00
TanWenyan 20a8ed4466 fix: use String() instead of 'as string' for pointCode to survive Vite build 2026-03-23 20:36:21 +08:00
TanWenyan 7ad9e479cd fix: add pointCode to ReviewPointResult interface to survive build
Vite/Remix tree-shaking was stripping pointCode from the return object
because it wasn't declared in the ReviewPointResult interface.
Also removed debug console.logs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:33:38 +08:00
TanWenyan ca1cc23c99 debug: log all keys to find pointCode issue 2026-03-23 20:28:21 +08:00
TanWenyan 38a43133c0 debug: add server-side point.code logging and enlarge badge 2026-03-23 20:25:30 +08:00
TanWenyan daca126ee2 debug: add pointCode fallback and console log 2026-03-23 20:11:53 +08:00
TanWenyan 2fe773909e feat(ui): display evaluation point code and support code search
- Add pointCode field to ReviewPoint interface and data pipeline
- Show code badge (e.g., JZ-DJ-001) before evaluation point name
- Search bar now matches against point code in addition to name
- Updated placeholder to indicate code search support

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:02:35 +08:00
TanWenyan 13e16f4046 fix(ui): increase table tooltip max height to 80vh
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:51:02 +08:00
TanWenyan 9f9cfea0e6 fix(ui): dynamic tooltip width/height based on table dimensions
Table tooltip now calculates maxWidth from column count (140px/col,
min 400, max 85vw) and maxHeight from row count (30px/row, min 150,
max 70vh) for better readability of large tables.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:48:53 +08:00
TanWenyan cbe9a0f74e fix(ui): show table summary with hover tooltip for full table view
Table fields now show a compact summary (first row preview + table icon)
with the full rendered table appearing on hover via Tooltip component,
consistent with the existing overflow tooltip behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:45:00 +08:00
TanWenyan 93b8673363 fix(ui): handle single-line markdown tables and pipe-delimited tables
- parseMarkdownTable now handles tables stored as single line by
  counting columns from separator row and grouping cells accordingly
- Added isPipeTable detection for pipe-delimited data without header
  (e.g., "1 | name | qty\n2 | name | qty")
- Added renderPipeTable for headerless pipe tables

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:30:44 +08:00
TanWenyan d0124b0121 feat(ui): support markdown table rendering in evaluation field values
ReactTableTooltip now detects and renders markdown tables (| delimited)
in addition to existing tab-delimited tables. Table content is rendered
directly as an HTML table instead of showing raw markdown text.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:19:53 +08:00
DocAuditAI Dev ebcaf05625 revert: reset to 32bee87 for clean text_bbox baseline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:14:11 +08:00
DocAuditAI Dev 6563686bb3 Merge branch 'Wren-dev' of http://git.7bm.co:1024/leke/docreview into Wren-dev 2026-03-23 18:03:56 +08:00
DocAuditAI Dev e1ac39cb3a chore: revert broken text_bbox integration changes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:03:34 +08:00
DocAuditAI Dev 4942c89cd8 chore: revert broken text_bbox integration changes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:03:19 +08:00
DocAuditAI Dev 61fdfec3d0 fix(api): disable HTTP keep-alive to prevent ECONNRESET on reused sockets
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 17:01:32 +08:00
LiangShiyong 702b7d3e3a fix: 修复甲方和乙方的公司名称是用第一个key内的value值来进行查询。 2026-03-23 16:45:35 +08:00
LiangShiyong 519287c7f4 feat: 渲染大模型的评查结果也添加上true和false的判断 2026-03-23 16:45:35 +08:00
LiangShiyong 4de16d66da fix: 添加湛江的地区选择 2026-03-23 16:45:35 +08:00
DocAuditAI Dev 33fbd6b860 feat(pdf): support GraphRAG text_bbox highlighting in PDF viewer
When documents are processed through GraphRAG pipeline, coordinate
enrichment produces text_bbox (paragraph-level coordinates) instead of
char_positions (character-level OCR coordinates). Added resolveCharPositions()
helper that converts text_bbox to CharPosition[] format, enabling PDF
highlight rendering for GraphRAG-processed documents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 16:44:22 +08:00
TanWenyan 32bee87998 fix(reviews): show field value when res=false instead of showing '缺失'
Second rendering path (entity fields) incorrectly hid values when
res=false, showing '缺失' even for fields with extracted values.
Fixed to match first rendering path: only show '缺失' when both
res=false AND value is empty. Values always display when present.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 01:05:48 +08:00
TanWenyan c0f8004278 feat(reviews): display not-applicable evaluation points in review list
- Create placeholder reviewPoints from not_applicable unified results
- Merge with existing reviewPoints for display
- Count notApplicable from reviewPoints for accurate statistics

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:29:48 +08:00
TanWenyan 0d8b9b1976 fix(reviews): make not-applicable button clickable with filter toggle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:16:35 +08:00
TanWenyan b13e758db1 fix(reviews): map failed_count to warning, always show not-applicable badge
- failed_count should be 'warning' not 'error' for scored eval
- Show '未涉及' badge always, not only when count > 0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:08:33 +08:00
TanWenyan 401097536e fix(reviews): use correct key 'data' from getReviewPoints_fromApi response
- getReviewPoints_fromApi returns {data, stats, ...} not {reviewPoints, ...}
- Fixed key check from 'reviewPoints' to 'data'

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:05:39 +08:00
TanWenyan b2e8d3299c fix(reviews): use legacy reviewPoints for graphrag mode to prevent content null crash
- reviewPoints from unified API lacks 'content' field expected by ReviewPointsList
- Use reviewData.reviewPoints (from /api/v3/review-points) which has proper content structure
- Scored data still available via scoredResults prop

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:53:31 +08:00
TanWenyan 48f605a5c4 feat(reviews): add not-applicable count display in evaluation statistics
- Add notApplicable field to Statistics interface
- Show blue "未涉及" badge when count > 0 (display only, no filter)
- Map backend not_applicable_count to frontend statistics

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:27:41 +08:00
TanWenyan 60d7d9a33b fix(frontend): fix loader try-catch syntax error
- Add missing closing brace for unified API error check
- Properly wrap catch block around error handling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 09:44:34 +08:00
TanWenyan 306cb24c70 feat(frontend): integrate GraphRAG scored evaluation results
- Add getUnifiedEvaluationResults API function
- Extend ReviewPointsListProps with flowType, scoredResults, scoredSummary
- Add ScoredResultCard rendering for graphrag flow_type
- Modify reviews.tsx loader to call unified API
- Add scored evaluation component imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 09:42:30 +08:00
TanWenyan 11c00d34bc fix(ReviewPointsList): 读取后端传入的 per-field res 替代前端自行判定
renderModelRule 对 AI 评查点的 res 计算改为优先使用后端写入
config.fields[key].res 的值,fallback 到原来的 value 非空判定。

解决了评查点不通过但所有细项都显示绿色的问题。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 15:50:12 +08:00
TanWenyan d82d537971 fix(upload): 传递 attributeType 参数到 uploadDocumentToServer 2026-03-18 23:15:05 +08:00
TanWenyan df02ed79c2 fix(upload): 子类型下拉框始终显示,不限于合同类型 2026-03-18 22:51:19 +08:00
TanWenyan 62a8f4b13d feat(cross-checking): 交叉评查上传支持合同类型选择 2026-03-18 22:00:26 +08:00
TanWenyan 9fd222ef3d feat(upload): 添加合同类型选择器,用户必须手动选择 2026-03-18 21:57:07 +08:00
TanWenyan 1a2ce367af feat(api): uploadDocumentToServer 增加 attribute_type 参数 2026-03-18 21:55:04 +08:00