中航光电热表web
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

81 lines
2.2 KiB

export const sensitive = {
/**
* 初始化敏感数据管理器
* @param {Object} config 配置项
* @param {Array} config.fields 需要脱敏的字段列表
* @returns {Object} 敏感数据管理器实例
*/
create(config = {}) {
const sensitiveFields = config.fields || [];
let initialMaskedData = {};
return {
/**
* 保存初始的脱敏数据
* @param {Object} data 包含脱敏数据的对象
*/
saveInitialData(data) {
initialMaskedData = {};
sensitiveFields.forEach(field => {
if (data[field]) {
initialMaskedData[field] = data[field];
}
});
},
/**
* 获取要提交的数据,过滤掉未修改的敏感字段
* @param {Object} formData 表单数据
* @returns {Object} 过滤后的提交数据
*/
getSubmitData(formData) {
const submitData = { ...formData };
sensitiveFields.forEach(field => {
// 如果敏感字段的值与初始值相同,删除该字段
if (submitData[field] === initialMaskedData[field]) {
delete submitData[field];
}
});
return submitData;
},
/**
* 更新脱敏数据
* @param {Object} newMaskedData 新的脱敏数据
*/
updateMaskedData(newMaskedData) {
Object.assign(initialMaskedData, newMaskedData);
},
/**
* 判断敏感数据是否被修改
* @returns {boolean}
*/
isModified(formData) {
return sensitiveFields.some(field => formData[field] !== initialMaskedData[field]);
},
/**
* 获取已修改的敏感字段列表
* @returns {Array}
*/
getModifiedFields(formData) {
return sensitiveFields.filter(field => formData[field] !== initialMaskedData[field]);
},
/**
* 重置为初始状态
* @param {Object} formData 表单数据对象
*/
reset(formData) {
sensitiveFields.forEach(field => {
if (initialMaskedData[field]) {
formData[field] = initialMaskedData[field];
}
});
},
};
},
};