新增一键复制差异主键

This commit is contained in:
2025-08-12 16:38:02 +08:00
parent 8d7c4e3730
commit 8c3f3df826

View File

@@ -939,17 +939,28 @@ function displayDifferences() {
});
let html = `
<!-- 字段筛选按钮 -->
<!-- 字段筛选按钮和操作按钮 -->
<div class="mb-3">
<div class="btn-group btn-group-sm flex-wrap" role="group">
<button type="button" class="btn btn-outline-primary active" onclick="filterByField('')">
全部 (${filteredDifferenceResults.length})
</button>
${Object.entries(fieldStats).map(([field, count]) => `
<button type="button" class="btn btn-outline-secondary" onclick="filterByField('${field}')">
${field} (${count})
</button>
`).join('')}
<div class="row">
<div class="col-md-8">
<div class="btn-group btn-group-sm flex-wrap" role="group">
<button type="button" class="btn btn-outline-primary active" onclick="filterByField('')">
全部 (${filteredDifferenceResults.length})
</button>
${Object.entries(fieldStats).map(([field, count]) => `
<button type="button" class="btn btn-outline-secondary" onclick="filterByField('${field}')">
${field} (${count})
</button>
`).join('')}
</div>
</div>
<div class="col-md-4">
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-success btn-sm" onclick="copyDifferenceKeys()">
<i class="fas fa-copy"></i> 复制差异主键
</button>
</div>
</div>
</div>
</div>
@@ -1989,6 +2000,70 @@ function copyRawData() {
}
}
// 复制差异主键
function copyDifferenceKeys() {
console.log('copyDifferenceKeys 被调用');
console.log('filteredDifferenceResults:', filteredDifferenceResults);
if (!filteredDifferenceResults || filteredDifferenceResults.length === 0) {
showAlert('warning', '无差异数据可复制');
return;
}
try {
// 收集所有差异记录的主键
const differenceKeys = [];
const uniqueKeys = new Set();
filteredDifferenceResults.forEach(diff => {
console.log('处理差异记录:', diff);
if (diff.key) {
let keyText = '';
if (typeof diff.key === 'object' && !Array.isArray(diff.key)) {
// 复合主键:转换为逗号分隔格式
keyText = Object.values(diff.key).join(',');
} else {
// 单主键或其他格式
keyText = String(diff.key);
}
console.log('提取的主键:', keyText);
// 避免重复主键
if (!uniqueKeys.has(keyText)) {
uniqueKeys.add(keyText);
differenceKeys.push(keyText);
}
}
});
console.log('收集到的主键列表:', differenceKeys);
if (differenceKeys.length === 0) {
showAlert('warning', '未找到有效的主键数据');
return;
}
// 将主键列表转换为文本格式(每行一个)
const keyText = differenceKeys.join('\n');
console.log('准备复制的文本:', keyText);
// 复制到剪贴板
navigator.clipboard.writeText(keyText).then(() => {
console.log('复制成功');
showAlert('success', `已复制 ${differenceKeys.length} 个差异主键到剪贴板`);
}).catch(err => {
console.error('复制失败:', err);
showAlert('danger', '复制失败,请手动选择复制');
});
} catch (error) {
console.error('处理差异主键失败:', error);
showAlert('danger', '处理差异主键失败: ' + error.message);
}
}
// 显示差异数据的原生数据
function showDifferenceRawData(keyStr) {
showRawData(keyStr); // 复用相同的原生数据显示逻辑