themleaf 页面弹层取值

themleaf 页面弹层取值

  • 创作背景
  • themleaf页面事件
    • onblur
    • onclick
  • 页面参数提交

创作背景

个人在日常开发中,遇到了一个需求页面,页面交互较多,用到的事件也很丰富,特此记录,方便后续查找也方便有需要的开发者采用,本文涉及项目所用架构为开源的若依架构。

themleaf页面事件

onblur

离焦事件,页面输入框输入手机号离焦后触发ajax请求后台自动获取官网用户名并赋值在页面上,页面如图
在这里插入图片描述
页面代码

<div class="form-group">  

  <label class="col-sm-3 control-label"><span style="color: red;">*  </span>学员手机号:</label>

  <div class="col-sm-8">

    <input id="phone" name="phone" class="form-control" type="text" onblur="getGwUserName();" placeholder="员工填写,必填">

  </div>

</div>

离焦事件触发方法getGwUserName()获取后台数据并返回重写在页面,getGwUserName()方法详情

//获取官网用户名

function getGwUserName() {

  var phone = $("#phone").val().trim();

  if (checkNull(phone)) {

    $.ajax({

      type: "POST",

      url: prefix + "/getGwUserName",

      dataType: 'json',

      data: {

        phone: phone

      },

      success: function (result) {

        if (result.code == web_status.SUCCESS) {

          var data = result.data;

          $("#gwUserName").val(data.userName);

          //放置memberId用户后面从元数据获取官网订单信息

          $("#memberId").val(data.memberId);

        }else {

          $.modal.alertWarning("未获取到官网用户名,请手动输入");

        }

      }

    });

  }

}

onclick

页面点击事件,这里点击添加在当前容器后拼接新的输入框内容
在这里插入图片描述
页面代码

<h3 style="float: left;padding-right: 100px;">官网抵扣商品信息</h3>

<button type="button" class="btn btn-w-m btn-primary" onclick="addgw();">添加</button>

<hr>

<div id="container"></div>

<h3>天猫成单信息</h3>

<hr>

点击事件触发方法addgw()往容器追加代码,可以多次点击添加内容,因此需要记录点击号clicknum用于动态化id,方便后续处理业务逻辑;addgw()方法内容

//点击添加按钮

var clicknum = 0;

function addgw() {

  var memberId = $("#memberId").val();

  if (checkNull(memberId)) {

    var html = '<div class="gwdetail">';

    html += '<div class="form-group"><label class="col-sm-3 control-label">订单号:</label><div class="col-sm-8"><input type="text" name="orderNo" id="orderNo'+clicknum+'" class="form-control" readonly onclick="getMetaOrders('+clicknum+');"/><input type="hidden" name="metaOrderId" id="metaOrderId'+clicknum+'"/></div></div>';

    html += '<div class="form-group"><label class="col-sm-3 control-label">抵扣商品:</label><div class="col-sm-8"><select name="deductionGoodsIds" class="form-control select2-multiple" multiple><option value="">请选择</option></select><button type="button" class="btn btn-w-m btn-primary" onclick="judgeRefund('+clicknum+');">关课/退款</button></div></div>';

    html += '<div class="form-group"><label class="col-sm-3 control-label">支付金额:</label><div class="col-sm-8"><input name="gwPaymentAmount" class="form-control" type="text"></div></div>\n';

    html += '<div class="form-group"><label class="col-sm-3 control-label">商品是否关课:</label><div class="col-sm-8"><select name="closeClass" class="form-control"><option value="">请选择</option><option value="0"></option><option value="1"></option></select></div></div>';

    html += '<div class="form-group"><label class="col-sm-3 control-label">抵扣商品是否有退款:</label><div class="col-sm-8"><select name="gwDrawback" class="form-control"><option value="">请选择</option><option value="0"></option><option value="1"></option></select></div></div>';

    html += '<div class="form-group"><label class="col-sm-3 control-label">抵扣金额:</label><div class="col-sm-8"><input name="deductionAmount" class="form-control" type="text"></div></div><div>---------------------------------------------------------------------</div></div>';

    $("#container").append(html);

    $("select[name='deductionGoodsIds']").select2();

    clicknum ++;

  }else {

    $.modal.alertWarning("请先填写学员手机号");

  }

}

在addgw()添加页面属性中onclick方法getMetaOrders(‘+clicknum+’)主要是负责跳转到弹层列表页,选择相应的订单号点击确定之后再返回当前弹层页面;

//分页获取当前memberId下订单信息

function getMetaOrders(num) {

  var memberId = $("#memberId").val();

  //var memberId = 34763975;

  $.modal.open("订单号", prefix + "/getMetaOrders?memberId="+memberId+"&clicknum="+num);

}

//官网抵扣商品是否关课/退款

function judgeRefund(num) {

  var $1 = $('#orderNo'+num+'');

  var parent = $1.parent().parent().parent();

  var orderNo = $1.val();

  var goodsIds = parent.find("select[name='deductionGoodsIds']").val().toString();

  //console.log("orderno:"+orderNo);

  //console.log("goodsIds:"+goodsIds);

  if (checkNull(orderNo) && checkNull(goodsIds)) {

    $.ajax({

      type: "POST",

      url: prefix + "/checkOpenClassAndRefundStatus",

      dataType: 'json',

      data: {

        orderNo:orderNo,

        goodsIds: goodsIds

      },

      success: function (result) {

        if (result.code == web_status.SUCCESS) {

          var data = result.data;

          //console.log(data)

          //判断开关课状态

          var find = parent.find("select[name='closeClass']");

          //console.log(find);

          find.empty();

          var html = '<option value="">请选择</option>';

          if (data.openclass == 1) {

            //全部关课

            html += '<option value="0"></option><option value="1" selected></option>';

          }else {

            //没有全关

            html += '<option value="0" selected></option><option value="1"></option>';

          }

          find.append(html);


          var find2 = parent.find("select[name='gwDrawback']");

          find2.empty();

          var html2 = '<option value="">请选择</option>';

          if (data.refund == 1) {

            //全退

            html2 += '<option value="0"></option><option value="1" selected></option>';

          }else {

            //没有全退

            html2 += '<option value="0" selected></option><option value="1"></option>';

          }

          find2.append(html2);

        }

      }

    });

  }

}

页面效果就是点击订单号弹层列表页,然后选中订单号点击确定
在这里插入图片描述
点击订单号弹层列表页,分页查询
在这里插入图片描述
弹层页面点击确定回传至父页面值的方法在弹层页面提交方法中

function submitHandler() {

  var id = $.table.selectColumns($.table._option.columns[1].field);

  if (id.length == 0) {

    $.modal.alertWarning("请至少选择一条记录");

    return;

  }

  var orderNo = $.table.selectColumns($.table._option.columns[2].field);

  $.modal.close();

  // 父页面的方法

  // activeWindow().selectUsers();

  // 父页面的变量

  var clicknum = $("#clicknum").val();

  console.log(id);

  console.log(orderNo);

  //console.log('#metaOrderId'+clicknum+'');

  activeWindow().$('#metaOrderId'+clicknum+'').val(id);

  activeWindow().$('#orderNo'+clicknum+'').val(orderNo);

  activeWindow().getMetaItem(clicknum);

}

页面主要内容相关的就这些,其他的onclick或者onblur事件相似处理即可;
另外编辑页面在应对addgw()方法添加内容回显时采用了ajax返回html页面的处理方式

$(function () {

  getGwInfos();

});


//初始化加载官网抵扣商品信息

function getGwInfos() {

  var recordId = $("#id").val();

  var memberId = $("#memberId").val();

  $.ajax({

    type: "POST",

    url: prefix + "/getGwInfos",

    dataType: 'html',

    data: {

      recordId: recordId,

      memberId:memberId

    },

    success: function (html) {

      $("#container").append(html);

      var array = $("#container").find("select[name='deductionGoodsIds']");

      array.each(function (i,item) {

        //console.log(item)

        $(item).select2();

      })

      //$(".gwdetail").find(".deductionGoodsIds").select2();

    }

  });

}

具体的回显html页面代码如下

<div class="gwdetail" th:each="gw : ${gwInfos}">

    <input type="hidden" name="gwId" id="gwId" th:value="${gw.id}"/>

    <div class="form-group">

        <label class="col-sm-3 control-label">订单号:</label>

        <div class="col-sm-8">

            <input type="hidden" name="metaOrderId" th:id="metaOrderId+${gwStat.index}" th:value="${gw.metaOrderId}"/>

            <input type="text" name="orderNo" th:id="orderNo+${gwStat.index}"  class="form-control" readonly

                   th:value="${gw.orderNo}" th:onclick="getMetaOrders([[${gwStat.index}]])"/>

        </div>

    </div>

    <div class="form-group">

        <label class="col-sm-3 control-label">抵扣商品:</label>

        <div class="col-sm-8">

            <select name="deductionGoodsIds" class="form-control select2-multiple" multiple>

                <option value="">请选择</option>

                <option th:each="item:${gw.items}" th:value="${item.goodsId}"

                        th:selected="${gw.deductionGoodsIds?.contains(item.goodsId)}" th:text="${item.goodsName}"></option>

            </select>

            <button type="button" class="btn btn-w-m btn-primary" th:onclick="judgeRefund([[${gwStat.index}]])">关课/退款

            </button>

        </div>

    </div>

    <div class="form-group">

        <label class="col-sm-3 control-label">支付金额:</label>

        <div class="col-sm-8">

            <input id="gwPaymentAmount" name="gwPaymentAmount" class="form-control" type="text"

                   th:value="${gw.paymentAmount}">

        </div>

    </div>

    <div class="form-group">

        <label class="col-sm-3 control-label">商品是否关课:</label>

        <div class="col-sm-8">

            <select id="closeClass" name="closeClass" class="form-control">

                <option value="">请选择</option>

                <option value="0" th:selected="${gw.closeClass == 0}"></option>

                <option value="1" th:selected="${gw.closeClass == 1}"></option>

            </select>

        </div>

    </div>

    <div class="form-group">

        <label class="col-sm-3 control-label">抵扣商品是否有退款:</label>

        <div class="col-sm-8">

            <select id="gwDrawback" name="gwDrawback" class="form-control">

                <option value="">请选择</option>

                <option value="0" th:selected="${gw.drawback == 0}"></option>

                <option value="1" th:selected="${gw.drawback == 1}"></option>

            </select>

        </div>

    </div>

    <div class="form-group">

        <label class="col-sm-3 control-label">抵扣金额:</label>

        <div class="col-sm-8">

            <input id="deductionAmount" name="deductionAmount" class="form-control" type="text" th:value="${gw.deductionAmount}">

        </div>

    </div>

    <div>

        ---------------------------------------------------------------------

    </div>

</div>

这里需要注意的是themleaf页面拼接动态id时的操作
在这里插入图片描述
这样的话涉及到themleaf复杂页面事件添加,各种事件交互的操作就完成了,重复的没有多写。

页面参数提交

由于addgw()方法会添加重复的属性名称,因此在提交时需要特殊处理,以list方式添加进提交参数json中提交,页面提交方法代码

function submitHandler() {

  var data = $.common.formToJSON('form-tmUpgradeOrderRecord-add');

  //var data = $('#form-tmUpgradeOrderRecord-add').serializeArray();

  var list= new Array();

  $("div[class='gwdetail']").each(function(i,item){

    var metaOrderId = $(item).find("input[name='metaOrderId']").val();

    var orderNo = $(item).find("input[name='orderNo']").val();

    var deductionGoodsIds = $(item).find("select[name='deductionGoodsIds']").val().toString();

    var gwPaymentAmount = $(item).find("input[name='gwPaymentAmount']").val();

    var closeClass = $(item).find("select[name='closeClass']").val();

    var gwDrawback = $(item).find("select[name='gwDrawback']").val();

    var deductionAmount = $(item).find("input[name='deductionAmount']").val();

    var detail = {"metaOrderId":metaOrderId,"orderNo":orderNo,"deductionGoodsIds":deductionGoodsIds,"paymentAmount":gwPaymentAmount

                  ,"closeClass":closeClass,"drawback":gwDrawback,"deductionAmount":deductionAmount};

    list.push(detail);

  });

  //data.push({"name":"gwlist","value":list});

  data["gwlist"]=list;

  data = JSON.stringify(data);

  //console.log(data);

  if ($.validate.form()) {

    $.operate.save2(prefix + "/add", data);

  }

}


// 获取form下所有的字段并转换为json对象

formToJSON: function(formId) {

  var json = {};

  $.each($("#" + formId).serializeArray(), function(i, field) {

    json[field.name] = field.value;

  });

  return json;

}

其中提交方法中调用的save2()ajax方法需要指定contentType: “application/json; charset=utf-8”,ajax默认的提交方式不支持json格式数据
在这里插入图片描述
后端接收参数方法中传参需要加入注解@RequestBody
在这里插入图片描述
这样整个过程就完整了,后续如果有需要但是博文没看明白的欢迎留言,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/712273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell文本三剑客 awk 和 grep

awk 前言 AWK是一种优良的文本处理工具。它不仅是 Linux中也是任何环境中现有的功能最强大的数据处理引擎之一。 Linux中最常用的文本处理工具有grep&#xff0c;sed&#xff0c;awk。行内将之称为文本三剑客&#xff0c;就功能量和效率来看&#xff0c;awk是当之无愧的文本三…

代码随想录算法训练营day22|701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点、 235. 二叉搜索树的最近公共祖先

701.二叉搜索树中的插入操作 这道题较为简单&#xff0c;只需要通过递归找到符合要求的叶子节点&#xff0c;并将节点插入即可。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(…

软件体系结构笔记(自用)

来自《软件体系结构原理、方法与实践&#xff08;第三版&#xff09;》清华大学出版社 张友生编著 1-8章12章 复习笔记 如有错误&#xff0c;欢迎指正&#xff01;&#xff01;&#xff01;

【每日刷题】Day65

【每日刷题】Day65 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 175. 计算二叉树的深度 - 力扣&#xff08;LeetCode&#xff09; 2. 序列找数_牛客题霸_牛客网…

(新)Spring Security如何实现登录认证(实战篇)

一、回顾认证流程详解 概念速查: Authentication接口: 它的实现类&#xff0c;表示当前访问系统的用户&#xff0c;封装了用户相关信息。 AuthenticationManager接口&#xff1a;定义了认证Authentication的方法 UserDetailsService接口&#xff1a;加载用户特定数据的核心接…

内网安全【2】-域防火墙

1.判断什么时候用代理 2.判断什么时候用隧道 3.判断出网和不出网协议 4.如何使用代理建立节点并连接 5.如何使用隧道技术封装协议上线 6.判断哪些代理或隧道情况选择放弃 代理技术&#xff1a;解决网络通讯不通的问题(利用跳板机建立节点后续操作)&#xff08;网络设置导…

【C++】STL中stack、queue、deque的使用

前言&#xff1a;在前面我们学习了List的模拟实现与使用&#xff0c;今天我们进一步的来学习stack、queue、deque的使用方法&#xff0c;然后为后面的模拟实现做一下铺垫。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff…

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)

V90PN总线伺服驱动和S7-1200PLC通信需要安装GSD文件,PLC通过各种标准报文实现V90的位置和速度控制。 1、V90伺服驱动器控制(PN版本) V90伺服驱动器控制(PN版本)_v90 pn 最简接线-CSDN博客文章浏览阅读303次。V90伺服驱动器脉冲控制常用参数和接线,请查看下面文章链接:SMAR…

VirtFuzz:一款基于VirtIO的Linux内核模糊测试工具

关于VirtFuzz VirtFuzz是一款功能强大的Linux内核模糊测试工具&#xff0c;该工具使用LibAFL构建&#xff0c;可以利用VirtIO向目标设备的内核子系统提供输入测试用例&#xff0c;广大研究人员可以使用该工具测试Linux内核的安全性。 工具要求 1、Rust&#xff1b; 2、修补的Q…

学习cel-go了解一下通用表达语言评估是什么

文章目录 1. 前言2. cel-go2.1 cel-go关键概念Applications(应用)Compilation(编译)Expressions(表达式)Environment环境解析表达式的三个阶段 3. cel-go的使用4. cel-go使用5. 说明6. 小结7. 参考 1. 前言 最近因为在项目里面实现的一个使用和||来组合获取字段值的功能有点儿…

一键解锁创意无界:高效AI生成古典肖像图片,轻松打造艺术化身

在数字化时代&#xff0c;创意与艺术的结合正逐渐改变我们的生活。你是否曾梦想过拥有一幅专属于自己的古典肖像画&#xff0c;却又苦于找不到合适的画师或高昂的费用而望而却步&#xff1f;现在&#xff0c;这一切都将成为现实&#xff01; 进入首助编辑高手的AI魔法智绘图板块…

Java—装饰器模式

介绍 装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地将行为添加到现有的对象中&#xff0c;而无需修改其代码。装饰器模式提供了比继承更灵活的功能扩展方式。 主要角色 Component&#xff1a;定义一个对…

【编程技巧】降低程序复杂度:控制逻辑与业务逻辑分离

为什么要降低代码复杂度 好的项目都是迭代出来的&#xff0c;所以代码肯定是会被人维护的 降低代码复杂度就是为了降低下一个维护人的维护成本&#xff0c;更简单地理解跟修改代码 代码组成 代码逻辑 控制逻辑 业务逻辑 控制逻辑 控制业务逻辑的代码 例如&#xff1a;加缓存…

Redis-sentinel(哨兵模式)的搭建步骤及相关知识

1、什么是redis-sentinel&#xff0c;和redis主从复制相比&#xff0c;它具有什么优势 1.1、redis主从复制 Redis主从复制是一种用于数据冗余和可伸缩性的机制&#xff0c;它将一台Redis服务器的数据复制到其他Redis服务器。在这种模式下&#xff0c;数据会实时地从一个主节点…

PS通过GTX实现SFP网络通信1

将 PS ENET1 的 GMII 接口和 MDIO 接口 通过 EMIO 方 式引出。在 PL 端将引出的 GMII 接口和 MDIO 接口与 IP 核 1G/2.5G Ethernet PCS/PMA or SGMII 连接&#xff0c; 1G/2.5G Ethernet PCS/PMA or SGMII 通过高速串行收发器 GTX 与 MIZ7035/7100 开发…

Pytest 读取excel文件参数化应用

本文是基于Pytest框架&#xff0c;读取excel中的文件&#xff0c;传入页面表单中&#xff0c;并做相应的断言实现。 1、编辑媒体需求 首先明确一下需求&#xff0c;我们需要对媒体的表单数据进行编辑&#xff0c;步骤如下&#xff1a; 具体表单如下图所示 1、登录 2、点击我…

配置中心理论学习

配置中心是一种用于集中管理应用程序配置信息的系统或服务。在微服务架构中&#xff0c;由于服务数量众多且可能分布在不同的环境中&#xff0c;配置中心的作用尤为突出。它允许开发者将配置信息从应用程序代码中分离出来&#xff0c;集中存储和管理&#xff0c;从而提高配置的…

训练营第三十八天 | 309.最佳买卖股票时机含冷冻期动态规划系列七总结714.买卖股票的最佳时机含手续费股票问题总结篇!

309.最佳买卖股票时机含冷冻期 力扣题目链接(opens new window) 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#x…

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令&#xff0c;脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;grep更适合单纯的查找或匹配文本&#xff0c;sed更适合编辑匹配到的文本&#xff0c;awk更适合格式化文本&#xff0c;对…

硬件SPI读写W25Q64

硬件SPI读写W25Q64 接线图&#xff08;和软件SPI一样&#xff09; 使用SPI1&#xff0c;SCK&#xff0c;接PA5&#xff1b;MISO&#xff0c;接PA6&#xff1b;MOSI&#xff0c;接PA7&#xff1b;NSS&#xff0c;可接PA4。 接线图对应&#xff1a;PA5接CLK引脚&#xff0c;PA6…