小组团队项目团队博客7.0
今天完成了“支持录入安全风险项点过程中,自动判断风险库中是否有相似内容,如有相似内容给出合并提示字样,如“本次录入内容与风险库第 15、18 项内容相似或接近,建议进行合并! ”等字样;”的功能

checkSimilarity() {
this.similarityWarning = '';
this.similarItems = []; // 用于存储相似项
// 获取当前表单的所有相关字段
const currentForm = {
riskProject: this.form.riskItem,
riskPoint: this.form.riskPoint,
responsibleDepartment: this.form.responsibleDepartment,
riskCategory: this.form.riskCategory,
riskLevel: this.form.riskLevel,
harmDegree: this.form.harmDegree,
controlMeasures: this.form.controlMeasures,
controlPosition: this.form.controlPosition,
controlPerson: this.form.controlPerson,
entryDate: this.form.entryDate,
auditDate: this.form.auditDate,
auditStatus: this.form.auditStatus
};
// 清空相似项数组
this.similarItems = [];
// 检查相似性
for (const item of this.tableData) {
// 获取现有数据项的所有相关字段
const existingItem = {
riskProject: item.riskItem,
riskPoint: item.riskPoint,
responsibleDepartment: item.responsibleDepartment,
riskCategory: item.riskCategory,
riskLevel: item.riskLevel,
harmDegree: item.harmDegree,
controlMeasures: item.controlMeasures,
controlPosition: item.controlPosition,
controlPerson: item.controlPerson,
entryDate: item.entryDate,
auditDate: item.auditDate,
auditStatus: item.auditStatus
};
const similarityScore = this.calculateSimilarity(currentForm, existingItem);
// 根据相似度分数设定阈值,这里假设 0.7 表示 70% 的相似度
if (similarityScore > 0.7) {
this.similarItems.push(item);
}
}
if (this.similarItems.length > 0) {
this.showSimilarityDialog = true;
}
},
calculateSimilarity(form1, form2) {
let totalScore = 0;
const weight = 1 / Object.keys(form1).length;
for (const key in form1) {
if (form1[key] && form2[key]) {
if (typeof form1[key] === 'string' && typeof form2[key] === 'string') {
const set1 = new Set(form1[key].split(''));
const set2 = new Set(form2[key].split(''));
const intersection = new Set([...set1].filter(x => set2.has(x)));
const union = new Set([...set1, ...set2]);
totalScore += (intersection.size / union.size) * weight;
} else if (form1[key] === form2[key]) {
totalScore += 1 * weight;
}
}
}
return totalScore;
},
mergeData() {
if (this.similarItems.length === 0) {
return;
}
// 这里只是简单地将当前表单数据覆盖相似项中的第一条数据
// 实际应用中可以根据业务需求定义更复杂的合并逻辑
const similarItem = this.similarItems[0];
const index = this.tableData.findIndex(item => item.id === similarItem.id);
if (index !== -1) {
this.tableData[index] = this.form;
}
this.showSimilarityDialog = false;
this.similarItems = [];
}
}
然后是“批量导入”功能


浙公网安备 33010602011771号