小组团队项目团队博客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 = [];
        }
    }

然后是“批量导入”功能

posted @ 2025-04-23 23:12  鱼一直摸  阅读(5)  评论(0)    收藏  举报