1

再会,

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

问题 :

我正在尝试设置一个自定义脚本,该脚本根据选择的年份计算用户的年龄,此外,当用户输入 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

非常感谢<3

//我的自定义代码使用我在 .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;
        }       
        
});
4

1 回答 1

2

您的代码中有两个问题

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

使用此代码设置事件fullnameage事件的值refresh

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

上面的代码将对事件fullnameage字段进行更改。refresh如果您需要实时更改,可以使用以下代码。设置事件 on brithdateto changeage和 on firstnameand lastnameto change 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并且不会是用户输入。

于 2021-07-24T15:00:25.160 回答