Skip to content

Commit f3c22ec

Browse files
committed
chore: logo
1 parent b6d7cfa commit f3c22ec

File tree

3 files changed

+60
-44
lines changed

3 files changed

+60
-44
lines changed

modules/tool/packages/docDiff/README.md

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
## 功能特性
66

7-
- 📝 **段落级对比**: 逐段分析文档差异
8-
- 🎨 **可视化报告**: 生成美观的 HTML 对比报告
9-
- 📊 **统计信息**: 显示新增、删除、修改、未修改的段落数量
7+
- 📝 **行级对比**: 逐行分析文档差异,精确识别变更
8+
- 🎨 **可视化报告**: 生成美观的双栏 HTML 对比报告
9+
- 🔄 **导航功能**: 支持按钮和键盘快捷键在变更间跳转
10+
- 📊 **统计信息**: 显示新增、删除、修改、未修改的行数
1011
- 🔒 **安全防护**: 自动转义 HTML 字符,防止 XSS 攻击
1112
- 📱 **响应式设计**: 支持移动端浏览
1213
-**高性能**: 基于相似度算法的智能对比
@@ -16,66 +17,70 @@
1617
### 输入参数
1718

1819
- **originalText** (必需): 原始的 Markdown 文档内容
19-
- **modifiedText** (必需): 修改后的 Markdown 文档内容
20+
- **modifiedText** (必需): 修改后的 Markdown 文档内容
2021
- **title** (可选): 对比报告的标题,默认为"文档对比报告"
2122

2223
### 输出
2324

24-
返回一个完整的 HTML 文件,包含:
25+
返回 HTML 文件访问 URL,包含:
2526
- 文档标题和生成时间
2627
- 变更统计信息
27-
- 逐段对比详情
28-
- 美观的样式设计
28+
- 双栏对比视图(左为原始文档,右为修改后文档)
29+
- 导航控制按钮
30+
- 响应式设计支持
2931

3032
## 对比算法
3133

3234
工具使用智能的相似度算法来识别文档变化:
3335

34-
1. **段落分割**: 将文档按空行分割为段落
36+
1. **行级分割**: 将文档按换行符分割为行
3537
2. **相似度计算**: 基于字符级别的相似度匹配
3638
3. **变更分类**:
3739
- 未修改 (>80% 相似度)
38-
- 修改 (30%-80% 相似度)
40+
- 修改 (10%-80% 相似度)
3941
- 新增 (仅在修改后文档中存在)
4042
- 删除 (仅在原始文档中存在)
41-
4. **最佳匹配**: 寻找最相似的段落配对
43+
4. **最佳匹配**: 寻找最相似的行配对
4244

4345
## 使用示例
4446

4547
```typescript
4648
const result = await tool({
4749
originalText: `# 项目文档
48-
50+
4951
## 功能介绍
5052
这是一个测试功能。
5153
5254
## 安装步骤
5355
1. 下载代码
5456
2. 运行安装命令`,
55-
57+
5658
modifiedText: `# 项目文档
57-
59+
5860
## 功能介绍
5961
这是一个更新的测试功能。
6062
6163
## 安装步骤
6264
1. 下载代码
6365
2. 运行安装命令
6466
3. 配置环境变量`,
65-
67+
6668
title: "项目文档变更记录"
6769
});
6870

69-
console.log(result.html); // 输出 HTML 对比报告
71+
console.log(result.htmlUrl); // 输出 HTML 对比报告 URL
7072
```
7173

7274
## HTML 报告特性
7375

7476
- 🎨 **现代化设计**: 渐变背景、卡片布局、阴影效果
7577
- 📈 **统计仪表板**: 直观显示各类变更数量
78+
- 🔄 **双栏对比**: 左右并排显示原始和修改内容
79+
- 🎯 **导航功能**: 点击按钮或使用键盘快捷键在变更间跳转
7680
- 🏷️ **状态标签**: 不同颜色标识变更类型
77-
- 📝 **代码高亮**: 使用等宽字体显示内容
78-
- 🔄 **对比视图**: 并排显示原始和修改内容
81+
-**高亮效果**: 柔和的高亮提示,自动消失
82+
- 📝 **代码显示**: 使用等宽字体保持格式
83+
- 📱 **响应式布局**: 自适应不同屏幕尺寸
7984

8085
## 技术实现
8186

@@ -119,4 +124,4 @@ bun run build
119124

120125
- **当前版本**: 1.0.0
121126
- **FastGPT 兼容性**: 完全兼容
122-
- **依赖**: 仅依赖 Zod,无外部 API 调用
127+
- **依赖**: 仅依赖 Zod,无外部 API 调用
Lines changed: 19 additions & 19 deletions
Loading

modules/tool/packages/docDiff/src/index.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,8 @@ function generateHtmlReport(diffs: ParagraphDiff[], title: string): string {
458458
// 只统计左栏的变更项,避免重复统计
459459
const leftColumnItems = document.querySelector('.column:first-child').querySelectorAll('.diff-item');
460460
leftColumnItems.forEach((item, index) => {
461-
// 只统计真正有变更的内容(新增、删除、修改)
462-
if (item.classList.contains('added') ||
463-
item.classList.contains('removed') ||
461+
// 只统计左栏的变更项(删除和修改)
462+
if (item.classList.contains('removed') ||
464463
item.classList.contains('modified')) {
465464
changes.push(index);
466465
}
@@ -502,7 +501,9 @@ function generateHtmlReport(diffs: ParagraphDiff[], title: string): string {
502501
const rightColumnItem = document.querySelector('.column:last-child').querySelectorAll('.diff-item')[targetIndex];
503502
504503
if (leftColumnItem && rightColumnItem) {
504+
// 同时滚动左右两栏到对应位置
505505
leftColumnItem.scrollIntoView({ behavior: 'smooth', block: 'center' });
506+
rightColumnItem.scrollIntoView({ behavior: 'smooth', block: 'center' });
506507
leftColumnItem.classList.add('highlight');
507508
rightColumnItem.classList.add('highlight');
508509
@@ -565,20 +566,25 @@ function generateHtmlReport(diffs: ParagraphDiff[], title: string): string {
565566
const originalContent = diffs
566567
.map((diff, index) => {
567568
let content = '';
569+
let badge = '';
568570
const typeClass = diff.type;
569571

570572
if (diff.type === 'added') {
571573
// 新增的内容在左侧显示为空占位符
572574
content = '<div class="diff-paragraph empty-line"></div>';
573-
} else if (diff.type === 'removed' || diff.type === 'modified') {
575+
} else if (diff.type === 'removed') {
574576
content = `<div class="diff-paragraph">${escapeHtml(diff.original || '')}</div>`;
577+
badge = '<span class="diff-badge badge-removed">删除</span>';
578+
} else if (diff.type === 'modified') {
579+
content = `<div class="diff-paragraph">${escapeHtml(diff.original || '')}</div>`;
580+
badge = '<span class="diff-badge badge-removed">删除</span>';
575581
} else {
576582
content = `<div class="diff-paragraph">${escapeHtml(diff.original || '')}</div>`;
577583
}
578584

579585
return `
580586
<div class="diff-item ${typeClass}" data-index="${index}">
581-
${diff.type !== 'unchanged' ? `<span class="diff-badge badge-${diff.type}">${diff.type === 'added' ? '新增' : diff.type === 'removed' ? '删除' : '修改'}</span>` : ''}
587+
${badge}
582588
${content}
583589
</div>
584590
`;
@@ -589,20 +595,25 @@ function generateHtmlReport(diffs: ParagraphDiff[], title: string): string {
589595
const modifiedContent = diffs
590596
.map((diff, index) => {
591597
let content = '';
598+
let badge = '';
592599
const typeClass = diff.type;
593600

594601
if (diff.type === 'removed') {
595602
// 删除的内容在右侧显示为空占位符
596603
content = '<div class="diff-paragraph empty-line"></div>';
597-
} else if (diff.type === 'added' || diff.type === 'modified') {
604+
} else if (diff.type === 'added') {
605+
content = `<div class="diff-paragraph">${escapeHtml(diff.modified || '')}</div>`;
606+
badge = '<span class="diff-badge badge-added">新增</span>';
607+
} else if (diff.type === 'modified') {
598608
content = `<div class="diff-paragraph">${escapeHtml(diff.modified || '')}</div>`;
609+
badge = '<span class="diff-badge badge-added">新增</span>';
599610
} else {
600611
content = `<div class="diff-paragraph">${escapeHtml(diff.modified || '')}</div>`;
601612
}
602613

603614
return `
604615
<div class="diff-item ${typeClass}" data-index="${index}">
605-
${diff.type !== 'unchanged' ? `<span class="diff-badge badge-${diff.type}">${diff.type === 'added' ? '新增' : diff.type === 'removed' ? '删除' : '修改'}</span>` : ''}
616+
${badge}
606617
${content}
607618
</div>
608619
`;

0 commit comments

Comments
 (0)