微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Frappe 框架自动计算年龄和全名

如何解决Frappe 框架自动计算年龄和全名

美好的一天,

我需要帮助来解决这个问题

问题:

我正在尝试设置一个自定义脚本,根据用户选择的年份计算用户的年龄,此外,当用户输入 first_name 、 last_name 、 middle_name 时,它​​应该反映在 full_name 上。

我已尽力编写代码,但它不起作用,对于那些怀着一颗金心阅读本文的人,请帮助我更正我的代码

补充说明:我正在使用 Frappe 框架并在 Ubuntu 18.04.5 LTS 上运行

有关我在哪里创建自定义代码和文档类型 (client_details) 的其他信息

截图: https://drive.google.com/drive/folders/1556W7AeeLfaJuC2Fu8RbnI7sSZc4hXQZ?usp=sharing

非常感谢

//我使用 .js 编写的自定义代码

    frappe.ui.form.on('client_details',{

    refresh: function(frm) {
      var today = new Date(); 
      var birthDate = new Date(brith_day); 
      var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth(); 
      if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
      age--; 
            } return age;
    }
    
    refresh: function(frm){
      var first_name = first_name
      var last_name = last_name
      var full_name = first_name.concat(last_name)  
      return full_name;
        }       
        
});

解决方法

代码中有两个问题

  • 使用 return 而不是 set_value 进行输出
  • 使用多个刷新事件。由于key相同,最后一个生效。

使用此代码在 fullname 事件中设置 agerefresh 的值

frappe.ui.form.on('client_details',{
  refresh: function(frm) {
    var today = new Date(); 

    // this is how you get data from form
    var birthDate = new Date(frm.doc.brithday); 

    var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth(); 
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
      age--; 
    } 

    // use frm.set_value to set value of a field
    frm.set_value('age',age);

    // getting data from form
    var first_name = frm.doc.firstname
    var last_name = frm.doc.lastname
    var full_name = firstname.concat(lastname)  
    
    // setting fullname in form
    frm.set_value('fullname',full_name);
  }        
});

以上代码将在 fullname 事件的 agerefresh 字段中进行更改。如果您需要实时更改,可以使用以下代码。在 brithdate 上设置事件以更改 age,在 firstnamelastname 上设置事件以更改 fullname

frappe.ui.form.on('client_details',{
  brithday: function(frm) {
    var today = new Date(); 

    // this is how you get data from form
    var birthDate = new Date(frm.doc.brithday); 

    var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth(); 
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
      age--; 
    } 

    // use frm.set_value to set value of a field
    frm.set_value('age',age);
  },firstname: function(frm) {
    // getting data from form
    var first_name = frm.doc.firstname
    var last_name = frm.doc.lastname
    var full_name = firstname.concat(lastname)  
    
    // setting fullname in form
    frm.set_value('fullname',full_name);
  },lastname: function(frm) {
    // getting data from form
    var first_name = frm.doc.firstname
    var last_name = frm.doc.lastname
    var full_name = firstname.concat(lastname)  
    
    // setting fullname in form
    frm.set_value('fullname',full_name);
  }        
});

最好将 agefullname 字段保留为 readonly,因为它们是 computed 并且不会是用户输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。