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
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]; |
|
} |
|
}); |
|
}, |
|
}; |
|
}, |
|
};
|
|
|