123
gaoshp
34 分钟以前 4c2a27b9d7604287c4f94c88a84a1f10a44ad39c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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];
          }
        });
      },
    };
  },
};