开发者社区> 问答> 正文

如何实现在主表单行文本中连续扫码,然后在子表单中自动新增明细

image.png

如图所示,我在扫码入口直接扫码,然后自动把扫码值填充到子表单中,然后子表单新增一行,同时清空扫码入口的值。等待下一次扫码。这个需求符合批量扫码的场景,不知道哪位大神能提供一个示例代码供我参考一下,万分感谢。

展开
收起
1335216255635508 2024-08-08 19:15:16 83 0
来自:钉钉宜搭
2 条回答
写回答
取消 提交回答
  • image.png

    已找到解决方案,只需在主表的单行文本中绑定onChange动作,然后用以下代码可以实现,供大家参考。

    /**
    * textField onChange
    * @param value 当前值
    */
    export function onChange({ value, actionType }) {
    
      // 避免给扫码入口置空时又触发了change事件中的代码
      if (actionType != "setValue") {
    
        var tableField = this.$("tableField_lzjjuun1");//需替换成子表单的唯一标识
    
        // 获取表格字段中的所有行数据
        var tableData = tableField.getValue();
    
        // 获取最后一行数据
        var lastRowIndex = tableData.length > 0 ? tableData.length - 1 : null;
        var lastRow = tableData.length > 0 ? tableData[tableData.length - 1] : null;
    
        // 判断最后一行是否为空
        var isLastRowEmpty = lastRow && !Object.values(lastRow).some(val => val !== "");
    
        if (isLastRowEmpty) {
          console.log(`The last row is empty.`);
          lastRow["textField_lzjjuun3"] = value;//需替换成子表单内单行文本的唯一标识
    
          // 更新最后一行数据
          tableData[lastRowIndex] = lastRow;
        }
        else {
          console.log(`The last row is not empty.`);
    
          // 创建一个新行
          var newRow = {
            "textField_lzjjuun3": value, // 新行中的字段,赋值给它
          };
          tableData.push(newRow); // 将新行添加到表格数据中
        }
    
        // 更新整个表格字段
        tableField.setValue(tableData); 
    
        // 手机可能会比较卡,延迟清空操作,以保障成功
        setTimeout(() => {
          this.$("textField_lzjjuun0").setValue("");//需替换成主表单行文本的唯一标识
          console.log(`textField_lzjjuun0 has been cleared.`);
        }, 100); // 延迟100毫秒(可以根据需要调整)
      }
    }
    
    2024-08-09 15:18:36
    赞同 3 展开评论 打赏
  • 若问题得到了解决,辛苦点下采纳回答哦~

    您好,可以参考以下思路实现:
    1.给子表单组件绑定添加一项的事件,在事件中,将刚刚新增一项的空行标识存储到变量中。且清空扫码入口组件的值
    2.扫码入口组件绑定change改变事件,在事件中根据刚刚存储的空行标识更新子表单内对应行的条码组件
    代码示例截图:
    image.png
    代码示例:

     // 避免给扫码入口置空时又触发了change事件中的代码
      if (actionType !="setValue"){
        var tableField = this.$("tableField_lzlcisup")//需替换成子表单的唯一标识
        var groupId = this.state.newGroupId //获取刚刚存储的空行标识
        if (groupId){
          tableField.updateItemValue(groupId, {
            'textField_lzlcisuq': value, // 更新子表条码,需替换成条码的唯一标识
          });
        }else{
          this.$("tableField_lzlcisup").setValue([{"textField_lzlcisuq":value}])
        }
    
      }
    
    --------------------------------------------
    // 将扫码入口组件置空
      this.$("textField_lzlcisuo").setValue("")//需替换成扫码入口的唯一标识
      // 将刚刚新增的子表空行标识存储到变量中
      this.setState({
        newGroupId
      })
    
    2024-08-08 23:21:35
    赞同 5 展开评论 打赏
问答分类:
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
「宜搭」是云钉原生低代码平台(钉钉 PaaS - aPaaS),让企业应用搭建更简单! 帮助中小企业降本提效,加强组织的数字化自主权; 帮助大型企业释放个体创新力,助力组织创新涌现。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载