字段修改记录操作日志的实现

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:37   1827   0

数据敏感字段的修改往往需要记录操作日志,例如客户表中的姓名、身份证等信息,需要系统记录下修改记录,方便以后溯源。

准备工作:

1、在白码低代码开发平台创建一个数据表,根据各自需求添加若干个字段,并准备若干条数据以便测试。


2、创建一个日志表。添加字段:时间、数据、字段、操作前、操作后、操作人(关联-用户)。


实现步骤:

1、新建一个“修改数据表”的功能。


2、点击功能进入编辑界面,在修改功能的基础上添加一个获取当前用户步骤:点开步骤设置,将id设为查询$$USER。

3、添加编程步骤。点开步骤的“设置>编程”进入代码编辑界面。


4、添加修改前数据、修改后数据、当前用户的参数,并在代码中引用。

5、获取当前时间。

   //当前时间
        let date = new Date();
        let YY = date.getFullYear() + '-';
        let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' ';
        let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':';
        let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes();
        let time=YY+MM+DD+hh+mm;

6、添加数据表中需要记录修改操作的字段id数据。

   //数据表字段id
        let fields = [
                "5ff44e3fdd9ec8350b2d24df",//字段1,
                "5ff44e45cf250d350cc124d2",//字段2,
                "5ff44e51cf250d350cc124d4",//字段4,
        ];


字段id获取方式为field_数据表>字段名:


7、添加可根据字段id获取字段名的map

  //数据表字段名
        let fieldNameMap = {
                "5ff44e3fdd9ec8350b2d24df": "字段1",
                "5ff44e45cf250d350cc124d2": "字段2",
                "5ff44e51cf250d350cc124d4": "字段4",
        };

8、是否需要记录字段修改的判断逻辑

 fields.forEach(field => {
                //对每个字段进行判断
                if (before[field] != after[field]) {
                        //修改前后不相等即有修改,需进行日志记录

                }
        });

9、创建日志记录

{
        "5ff44e6ecf250d350cc124d7": time,//时间
        "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//数据ID
        "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//字段
        "5ff44ea5cf250d350cc124da": before[field],//操作前
        "5ff44eaccf250d350cc124db": after[field],//操作后
        "5ff44eb5cf250d350cc124dc": user._id,//操作人
}


10、至此日志功能已全部实现。完整代码:

async function runProcess($model = model, $plugin = plugin, $params) {
        let before = await $params.before;//修改前的数据
        let after = await $params.after;//修改后的数据
        let user = await $params.user;//当前用户

        //当前时间
        let date = new Date();
        let YY = date.getFullYear() + '-';
        let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        let DD = (date.getDate() + 1 <= 10 ? '0' + date.getDate() : date.getDate()) + ' ';
        let hh = (date.getHours() + 1 <= 10 ? '0' + date.getHours() : date.getHours()) + ':';
        let mm = date.getMinutes() + 1 <= 10 ? '0' + date.getMinutes() : date.getMinutes();
        let time = YY + MM + DD + hh + mm;

        //数据表字段id
        let fields = [
                "5ff44e3fdd9ec8350b2d24df",//字段1,
                "5ff44e45cf250d350cc124d2",//字段2,
                "5ff44e51cf250d350cc124d4",//字段4,
        ];

        //数据表字段名
        let fieldNameMap = {
                "5ff44e3fdd9ec8350b2d24df": "字段1",
                "5ff44e45cf250d350cc124d2": "字段2",
                "5ff44e51cf250d350cc124d4": "字段4",
        };

        fields.forEach(field => {
                //对每个字段进行判断
                if (before[field] != after[field]) {
                        //修改前后不相等即有修改,需进行日志记录
                        $plugin.data.saveData("5ff44e6acf250d350cc124d6", {
                                "5ff44e6ecf250d350cc124d7": time,//时间
                                "5ff44e80cf250d350cc124d8": after["5ff44e5ccf250d350cc124d5"],//数据ID
                                "5ff44ea0cf250d350cc124d9": fieldNameMap[field],//字段
                                "5ff44ea5cf250d350cc124da": before[field],//操作前
                                "5ff44eaccf250d350cc124db": after[field],//操作后
                                "5ff44eb5cf250d350cc124dc": user._id,//操作人
                        });
                }
        });
}


效果:


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP