fastadmin:在新增页面,打开弹窗单选,参数回传

news/2024/4/27 11:46:27/文章来源:https://blog.csdn.net/weixin_46001736/article/details/129235937

样式:

核心代码:

一、弹窗的控制器中:

 //  定义一个公共函数select(),如果这个请求是Ajax,则返回index()函数,否则返回view对象的fetch()函数。
public function select()
{if ($this->request->isAjax()) {return $this->index();}return $this->view->fetch();
}

二、弹窗的页面样式,新增的页面select.html(位置同add.html一致)

<div class="panel panel-default panel-intro"><div class="panel-body no-padding"><div id="myTabContent" class="tab-content"><div class="tab-pane fade active in" id="one"><div class="widget-body no-padding"><table id="table" class="table table-striped table-bordered table-hover table-nowrap"></table></div></div></div></div>
</div>

三、弹窗对应js

写入select的方法

select: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'popup/purchase/itemno/select',//页面路径}});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,sortName: 'id',showToggle: false,showExport: false,maintainSelected: true,searchFormVisible: true, //是否始终显示搜索表单// commonSearch: false,//快速搜索singleSelect: true,//多选变为单选visible: false,//浏览模式(卡片切换)、显示隐藏列、导出、通用搜索全部隐藏showColumns: false,//列,可隐藏不显示的字段search:false,//快速搜索,搜索框columns: [[// {checkbox: true},//隐藏复选框{field: 'item_no', title: __('Item_no'), operate: 'LIKE'},{field: 'item_name', title: __('Item_name'), operate: 'LIKE'},{field: 'item_desc', title: __('Item_desc'), operate: 'LIKE'},{field: 'units', title: __('Units'), operate: 'LIKE'},//选择按钮{field: 'operate', title: __('Operate'), events: {'click .btn-chooseone': function (e, value, row, index) {// 回传数据给Fast.api.open的callback,很重要Fast.api.close({row:row}); },}, formatter: function () {//点击按钮跳转到对应的页面return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';},}]]});// 为表格绑定事件Table.api.bindevent(table);},

四、新增页面的前端展示

样式:

给'料号'增加点击出现弹窗的功能,

增加回传值要用到的id,①id="item_no<%=index+1%>";②id="item_name<%=index+1%>";③id="item_desc<%=index+1%>";④id="units<%=index+1%>"

增加需要打开弹窗的地址:data-url="popup/purchase/itemno/select"

class中写入:fachoosetable

增加参数行信息,传给弹窗,以便回传参数数,知道对应的具体行:data-line="<%=index+1%>"

// 料号
<td><input type="text" id="item_no<%=index+1%>" data-url="popup/purchase/itemno/select" class="form-control fachoosetable"  data-line="<%=index+1%>" name="<%=name%>[<%=index%>][item_no]"/>
</td>
// 料号名称
<td><input type="text" class="form-control" id="item_name<%=index+1%>" name=""  />
</td>
// 规格型号
<td><input type="text" class="form-control" id="item_desc<%=index+1%>" name=""  />
</td>
// 单位
<td><input type="text" class="form-control" id="units<%=index+1%>" name="" />
</td>

五、新增页面对应的js

 //选择页面弹窗
//选择所有具有"form"角色的表单。
var form = $("form[role=form]");
//fachoosetable(form)是一个函数,它可以用来检查一个表单中的输入字段,以确保它们符合预定义的模式或规则。
fachoosetable(form);
//定义函数fachoosetable()
function fachoosetable (form) {// 如果表单中的".fachoosetable"元素的大小大于0,则执行下面的代码。if ($(".fachoosetable", form).size() > 0) {//对class为fachoosetable的组件执行点击事件$(".fachoosetable", form).on('click', function () {var that = this;//获取该界面的前端页面传来的line(前端展示的是data-line)var line = $(this).data("line") ? $(this).data("line") : false;//获取该界面的前端界面传来的urlvar url = $(this).data("url") ? $(this).data("url") : (typeof Backend !== 'undefined' ? "popup/purchase/itemno/select" : "");//打开弹窗parent.Fast.api.open(url + "?line=" + line, __('Choose'), {//回传值callback: function (data) {//直接给页面的该行数据定义值$("#item_no"+line).val(data.row.item_no);$("#item_name"+line).val(data.row.item_name);$("#item_desc"+line).val(data.row.item_desc);$("#units"+line).val(data.row.units);}});return false;});}
}

全部代码:

选择页面:

select.html

<div class="panel panel-default panel-intro"><div class="panel-body no-padding"><div id="myTabContent" class="tab-content"><div class="tab-pane fade active in" id="one"><div class="widget-body no-padding"><table id="table" class="table table-striped table-bordered table-hover table-nowrap"></table></div></div></div></div>
</div>

js

define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {var Controller = {select: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'popup/purchase/itemno/select',}});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,sortName: 'id',showToggle: false,showExport: false,maintainSelected: true,searchFormVisible: true, //是否始终显示搜索表单// commonSearch: false,//快速搜索singleSelect: true,//多选变为单选visible: false,//浏览模式(卡片切换)、显示隐藏列、导出、通用搜索全部隐藏showColumns: false,//列,可隐藏不显示的字段search:false,//快速搜索,搜索框columns: [[// {checkbox: true, cellStyle: {css: {"min-width": "200px"}}},{field: 'item_no', title: __('Item_no'), operate: 'LIKE'},{field: 'item_name', title: __('Item_name'), operate: 'LIKE'},{field: 'item_desc', title: __('Item_desc'), operate: 'LIKE'},{field: 'units', title: __('Units'), operate: 'LIKE'},{field: 'operate', title: __('Operate'), events: {'click .btn-chooseone': function (e, value, row, index) {// 回传数据给Fast.api.open的callbackFast.api.close({row:row}); },}, formatter: function () {return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';},}]]});// 为表格绑定事件Table.api.bindevent(table);},index: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'popup/purchase/itemno/index' + location.search,add_url: 'popup/purchase/itemno/add',edit_url: 'popup/purchase/itemno/edit',del_url: 'popup/purchase/itemno/del',multi_url: 'popup/purchase/itemno/multi',import_url: 'popup/purchase/itemno/import',table: 'bom_item',}});Form.api.bindevent($("form[role=form]"), function(data, ret){//这里是表单提交处理成功后的回调函数,接收来自php的返回数据Fast.api.close(data);//这里是重点Toastr.success("成功");//这个可有可无}, function(data, ret){Toastr.success("失败");});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: 'id',sortName: 'id',fixedColumns: true,fixedRightNumber: 1,searchFormVisible: true, //是否始终显示搜索表单// commonSearch: false,//快速搜索singleSelect: true,//多选变为单选visible: false,//浏览模式(卡片切换)、显示隐藏列、导出、通用搜索全部隐藏showToggle: false,//浏览模式可以切换卡片视图和表格视图两种模式showColumns: false,//列,可隐藏不显示的字段search:false,//快速搜索,搜索框showExport: false,//导出columns: [[{checkbox: true},{field: 'item_no', title: __('Item_no'), operate: 'LIKE'},{field: 'item_name', title: __('Item_name'), operate: 'LIKE'},{field: 'item_desc', title: __('Item_desc'), operate: 'LIKE'},{field: 'units', title: __('Units'), operate: 'LIKE'},// {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}]]});// 为表格绑定事件Table.api.bindevent(table);},recyclebin: function () {// 初始化表格参数配置Table.api.init({extend: {'dragsort_url': ''}});var table = $("#table");// 初始化表格table.bootstrapTable({url: 'popup/purchase/itemno/recyclebin' + location.search,pk: 'id',sortName: 'id',columns: [[{checkbox: true},{field: 'id', title: __('Id')},{field: 'deletetime',title: __('Deletetime'),operate: 'RANGE',addclass: 'datetimerange',formatter: Table.api.formatter.datetime},{field: 'operate',width: '140px',title: __('Operate'),table: table,events: Table.api.events.operate,buttons: [{name: 'Restore',text: __('Restore'),classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',icon: 'fa fa-rotate-left',url: 'popup/purchase/itemno/restore',refresh: true},{name: 'Destroy',text: __('Destroy'),classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',icon: 'fa fa-times',url: 'popup/purchase/itemno/destroy',refresh: true}],formatter: Table.api.formatter.operate}]]});// 为表格绑定事件Table.api.bindevent(table);},add: function () {Controller.api.bindevent();},edit: function () {Controller.api.bindevent();},api: {bindevent: function () {Form.api.bindevent($("form[role=form]"));}}};return Controller;
});

控制器

<?phpnamespace app\admin\controller\popup\purchase;use app\common\controller\Backend;/*** bom料号维护管理** @icon fa fa-circle-o*/
class Itemno extends Backend
{/*** Itemno模型对象* @var \app\admin\model\popup\purchase\Itemno*/protected $model = null;public function _initialize(){parent::_initialize();$this->model = new \app\admin\model\popup\purchase\Itemno;$this->view->assign("statusList", $this->model->getStatusList());$this->view->assign("soFlagList", $this->model->getSoFlagList());}/*** 选择表格*/public function select(){if ($this->request->isAjax()) {return $this->index();}return $this->view->fetch();}/*** 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改*//*** 查看*/public function index(){//当前是否为关联查询$this->relationSearch = false;//设置过滤方法$this->request->filter(['strip_tags', 'trim']);if ($this->request->isAjax()) {//如果发送的来源是Selectpage,则转发到Selectpageif ($this->request->request('keyField')) {return $this->selectpage();}list($where, $sort, $order, $offset, $limit) = $this->buildparams();$list = $this->model->where($where)->order($sort, $order)->paginate($limit);foreach ($list as $row) {$row->visible(['id','item_no','item_name','item_desc','units']);}$result = array("total" => $list->total(), "rows" => $list->items());return json($result);}return $this->view->fetch();}}

新增页面

add.html

<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action=""><div style="border-radius:2px;margin-bottom:10px;background:#f5f5f5;padding:2% 5%;"><div class="row" style=""><!--部门--><label class="control-label col-xs-12 col-sm-1"><span style="color:red;">*</span>{:__('Depart_name')}:</label><div class="form-group col-xs-12 col-sm-2"><!--数据排序--><input id="c-depart_name" data-source="setting/basicinformation/departs" data-field="depart_code" data-pagination="true" data-page-size="5" data-order-by="id" data-primary-key="depart_code" class="form-control selectpage" name="row[depart_name]" type="text" placeholder="--请选择部门--"></div><!--需求日期--><label class="control-label col-xs-12 col-sm-1"><span style="color:red;">*</span>{:__('Need_time')}:</label><div class="form-group col-xs-12 col-sm-2"><input id="c-need_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[need_time]" type="text" value="{:date('Y-m-d H:i:s')}"></div><!--订单类型--><label class="control-label col-xs-12 col-sm-1"><span style="color:red;">*</span>{:__('Order_type')}:</label><div class="form-group col-xs-12 col-sm-2"><select  id="c-order_type" data-rule="required" class="form-control selectpicker" name="row[order_type]">{foreach name="orderTypeList" item="vo"}<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>{/foreach}</select></div></div><!--备注--><div class="row" style=""><label class="control-label col-xs-12 col-sm-1">{:__('Remark')}:</label><div class="form-group col-xs-12 col-sm-5"><input id="c-remark" class="form-control" name="row[remark]" type="text"></div></div><div class="form-group layer-footer"><label class="control-label col-xs-12 col-sm-2"></label><div class="col-xs-12 col-sm-8"><button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button><button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button></div></div><!--行--><div class="form-group row"><div><!--data-template的值作为行中的id值,才能便于追加行与引用--><table class="table fieldlist" data-template="linedetail" data-name="linedetail" id="linetable" ><thead><tr class="info"><th>行号</th><th>工单号</th><th>料号<span style="color:red;">*</span></th><th>料号名称</th><th>规格型号</th><th>单位</th><th>数量<span style="color:red;">*</span></th><th>长</th><th>宽</th><th>高</th><th>重量</th><th>备注</th><th>操作</th></tr></thead><tbody><!--name中<%=name%>表示的是data-template为此地的id值linedetail,对应的data-name的值linedetail--><script id="linedetail" type="text/html"><tr class="active">// <%=name%>[<%=index%>][line]表示该编程语言中调用由名称为“name”的变量中的索引为“index”的元素的对应的行号。//var obj = {'line':'','stockid':'','item_name':'','uom':'','ship_flag':'','need_time':'','quantity':'','price':'','line_amount':'','line_remark':''};// 行号<td style="width:75px"><input type="text" readonly="readonly" class="form-control" name="<%=name%>[<%=index%>][line]" value="1"/></td>// 工单号<td class="form-group"><input data-rule="required" type="text" class="form-control"  name="<%=name%>[<%=index%>][wip_entity_name]"/></td>// 料号<td><input type="text" id="item_no<%=index+1%>" data-url="popup/purchase/itemno/select" class="form-control fachoosetable"  data-line="<%=index+1%>" name="<%=name%>[<%=index%>][item_no]"/></td>// 料号名称<td><input type="text" class="form-control" id="item_name<%=index+1%>" name=""  /></td>// 规格型号<td><input type="text" class="form-control" id="item_desc<%=index+1%>" name=""  /></td>// 单位<td><input type="text" class="form-control" id="units<%=index+1%>" name="" /></td>// 数量<td style="width:100px" class="form-group"><input data-rule="required" id="quantity<%=index+1%>" type="text" class="form-control all_quantity"  name="<%=name%>[<%=index%>][quantity]"/></td>// 长<td><input type="text" class="form-control"  name="<%=name%>[<%=index%>][chang]"  /></td>// 宽<td><input type="text" class="form-control"  name="<%=name%>[<%=index%>][kuan]"  /></td>// 高<td><input type="text" class="form-control"  name="<%=name%>[<%=index%>][gao]"  /></td>// 重量<td><input type="text" class="form-control"  name="<%=name%>[<%=index%>][weight]"  /></td>// 备注        <td><input type="text" class="form-control"  name="<%=name%>[<%=index%>][remark]"/></td>//请购单号<td style="display:none"><input type="hidden" class="form-control"  name="<%=name%>[<%=index%>][pr_num]"/></td><td><span class="btn btn-sm btn-danger btn-removeline"><i class="fa fa-times"></i></span></td></tr></script></tbody><tr><td colspan="1"><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plas"></i>添加行</a></td><td colspan="6">{:__('总计数量')}:<input id="all_quantity" type="text" name="all_quantity" readonly="readonly" style="width:80px;border-width:0px"/></td></tr></table><!--请注意实际开发中textarea应该添加个hidden进行隐藏--><textarea id="textarea1" name="linedetail" class="form-control hidden" cols="30" rows="5"></textarea></div></div>  
</form>

js

define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {var Controller = {index: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'purchase/purchasefunction/purchaserequisition/index' + location.search,add_url: 'purchase/purchasefunction/purchaserequisition/add',edit_url: 'purchase/purchasefunction/purchaserequisition/edit',del_url: 'purchase/purchasefunction/purchaserequisition/del',multi_url: 'purchase/purchasefunction/purchaserequisition/multi',import_url: 'purchase/purchasefunction/purchaserequisition/import',table: 'purchase_pr_headers',}});//修改新增页面的大小$(".btn-add").data("area", ["80%","90%"]);//为选择器为".btn-add"的元素设置一个data属性"area",值为["90%","90%"]。//修改编辑页面的大小$(".btn-edit").data("area", ["80%","90%"]);//为选择器为".btn-edit"的元素设置一个data属性"area",值为["90%","90%"]。//修改表格中编辑按钮弹出页面的大小$(document).on('post-body.bs.table', function (e, settings, json, xhr) {$(".btn-editone").data("area", ["80%", "90%"]);});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: 'id',sortName: 'id',fixedColumns: true,fixedRightNumber: 2,columns: [[{checkbox: true},{field: 'pr_num', title: __('Pr_num'), operate: 'LIKE'},{field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3')}, formatter: Table.api.formatter.status},{field: 'need_time', title: __('Need_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},{field: 'approve_by', title: __('Approve_by'), operate: 'LIKE'},{field: 'approve_time', title: __('Approve_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},{field: 'depart_name', title: __('Depart_name'), operate: 'LIKE'},{field: 'order_type', title: __('Order_type'), searchList: {"0":__('Order_type 0'),"1":__('Order_type 1')}, formatter: Table.api.formatter.normal},//查看{field: 'id', title: __('detial'), table: table, buttons: [{name: 'name1',text:__('detials'), title: __('detials'),icon: 'fa fa-list',//图标classname: 'btn btn-xs btn-primary btn-dialog', //btn-dialog表示为弹窗url: 'popup/purchase/prline/index?pr_num={pr_num}',//自带参数idsextend: 'data-area=\'["75%","75%"]\'',//弹窗大小callback:function(data){}},], operate:false, formatter: Table.api.formatter.buttons},{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}]]});// 为表格绑定事件Table.api.bindevent(table);},recyclebin: function () {// 初始化表格参数配置Table.api.init({extend: {'dragsort_url': ''}});var table = $("#table");// 初始化表格table.bootstrapTable({url: 'purchase/purchasefunction/purchaserequisition/recyclebin' + location.search,pk: 'id',sortName: 'id',columns: [[{checkbox: true},{field: 'id', title: __('Id')},{field: 'deletetime',title: __('Deletetime'),operate: 'RANGE',addclass: 'datetimerange',formatter: Table.api.formatter.datetime},{field: 'operate',width: '140px',title: __('Operate'),table: table,events: Table.api.events.operate,buttons: [{name: 'Restore',text: __('Restore'),classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',icon: 'fa fa-rotate-left',url: 'purchase/purchasefunction/purchaserequisition/restore',refresh: true},{name: 'Destroy',text: __('Destroy'),classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',icon: 'fa fa-times',url: 'purchase/purchasefunction/purchaserequisition/destroy',refresh: true}],formatter: Table.api.formatter.operate}]]});// 为表格绑定事件Table.api.bindevent(table);},// add: function () {//     Controller.api.bindevent();// },add: function () {// 日期检查,光标移开执行$(document).on("blur",".datetimepicker",function(){//console.info("日期检查");// 获取当前日期,时间戳var date = new Date();// 添加分隔符“-”var seperator = "-";//获取input内需求日期var need_date = new Date($('#c-need_time').val());// 获取今天的年月日var year = date.getFullYear();var month = date.getMonth() + 1;//返回的是月份序号0-11需要+1才是月份var today = date.getDate();// 对月份进行处理,1-9月在前面添加一个“0”if (month >= 1 && month <= 9) {month = "0" + month;}// 对日期进行处理,1-9号在前面添加一个“0”if (today >= 0 && today <= 9) {today = "0" + today;}// 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期var nowDate = date.getFullYear() + seperator + month + seperator + today;//转换为时间戳var now_date = new Date(nowDate);// 检查日期是否小于今天,是则弹窗提示if(need_date<now_date){layer.alert("需求日期不可以小于今天!");$('#c-need_time').val(nowDate);//需求日期回到今天的日期}});//光标移开class为all_quantity对应的文本框,计算总数量$(document).on("blur",".all_quantity",function(){var all_quantity = 0;//设置变量all_quantity为0var shuliang = 0;for(var i = 1;i<50;i++){//获取单行的数量shuliang  = $('#quantity' + i).val();if(shuliang == ""){shuliang = 0;}else if(Number(shuliang) >0){//大于零的话,总数量就等于初始的总数量加上当前行的数量all_quantity = Number(all_quantity) + Number(shuliang);}}//总数量的值就是经过循环计算出来的值$('#all_quantity').val(all_quantity);});// 是指在前端模板中通过参数 "Fast" 引用后端代码中的 Fast 函数,用于前后端的交互Template.helper("Fast", Fast);//用于追加行的实现,追加行之后,行值发生改变//fa.event.appendfieldlist事件是指,当用户在确认框的输入框中添加新字段时触发的事件//当在文档上发生fa.event.appendfieldlist事件时,为id为linetable的元素中class为btn-append的元素绑定一个函数,该函数接受e和obj两个参数。$(document).on("fa.event.appendfieldlist", "#linetable .btn-append", function (e, obj) {//绑定动态下拉组件,触发下拉列表功能,解决不会被渲染的问题Form.events.selectpage(obj);//绑定日期组件,触发日期选择功能Form.events.datetimepicker(obj);//判断id下linetable的长度var len = $('#linetable tr').length;//console.info(len);for (var i = 1; i < len - 1; i++) {$('#linetable tr:eq(' + i + ') td:first').find('input').val(i);//查找id为table的表格内索引为i的行中的第一个单元格,然后将索引i设置为文本内容。//tr:eq(' + i + ') 是一个用于选择HTML元素的jQuery选择器,意思是选取序号为i的表格行(table row)。}//选择页面弹窗//选择所有具有"form"角色的表单。var form = $("form[role=form]");//fachoosetable(form)是一个函数,它可以用来检查一个表单中的输入字段,以确保它们符合预定义的模式或规则。fachoosetable(form);//定义函数fachoosetable()function fachoosetable (form) {// 如果表单中的".fachoosetable"元素的大小大于0,则执行下面的代码。if ($(".fachoosetable", form).size() > 0) {//对class为fachoosetable的组件执行点击事件$(".fachoosetable", form).on('click', function () {var that = this;//获取该界面的前端页面传来的line(前端展示的是data-line)var line = $(this).data("line") ? $(this).data("line") : false;//获取该界面的前端界面传来的urlvar url = $(this).data("url") ? $(this).data("url") : (typeof Backend !== 'undefined' ? "popup/purchase/itemno/select" : "");//打开弹窗parent.Fast.api.open(url + "?line=" + line, __('Choose'), {//回传值callback: function (data) {//直接给页面的该行数据定义值$("#item_no"+line).val(data.row.item_no);$("#item_name"+line).val(data.row.item_name);$("#item_desc"+line).val(data.row.item_desc);$("#units"+line).val(data.row.units);}});return false;});}}});//自定义删除事件//目前仅添加了动态更新行号,判断是否为最后一条数据并抛出异常,删除实际在上述click事件中进行,由于处在源文件中且点击按钮后两个方法均会运行目前未修改完成$(document).on("click", ".btn-removeline", function () {if ($('#linetable tr').length == 3) {// alert(__("Can't delete"));// return false;Toastr.info("这是最后一条了!"); throw new Error('Generated error manually to stop execution of script');}// 先找到最近的具有“fieldlist”类的元素,这里则是html中的table,将其赋值给变量container;var container = $(this).closest(".fieldlist");//定义一个tagName,先去寻找container中是否有data-tag(同data-name,data-template),如果没有就判断container是否是一个table,如果是tagName的值为tr,否则为ddvar tagName = container.data("tag") || (container.is("table") ? "tr" : "dd");//找到最近的具有tagName标签(这里即tr)$(this).closest(tagName).remove();//refresh(container);Toastr.info("删除成功!"); //设置行号的值var len = $('#linetable tr').length;//console.info(len);for (var i = 1; i < len - 1; i++) {$('#linetable tr:eq(' + i + ') td:first').find('input').val(i);//查找id为table的表格内索引为i的行中的第一个单元格,然后将索引i设置为文本内容。//tr:eq(' + i + ') 是一个用于选择HTML元素的jQuery选择器,意思是选取序号为i的表格行(table row)。}//执行删除的时候总数进行变更var all_quantity = 0;//设置变量all_quantity为0var shuliang = 0;for(var j = 1;j<50;j++){//获取单行的数量shuliang  = $('#quantity' + j).val();if(shuliang == ""){shuliang = 0;}else if(Number(shuliang) >0){//大于零的话,总数量就等于初始的总数量加上当前行的数量all_quantity = Number(all_quantity) + Number(shuliang);}}//总数量的值就是经过循环计算出来的值$('#all_quantity').val(all_quantity);});//因为日期选择框不会触发change事件,导致无法刷新textarea,所以加上判断$(document).on("dp.change", "#add-form .datetimepicker", function () {// 触发当前元素的父元素的上一个元素的input的change事件。$(this).parent().prev().find("input").trigger("change");});var len = $('#linetable tr').length - 1;//寻找id为table的表格tr的长度(即寻找在表格table下的tr的个数)-1(除去表头)var lens = len - 2;//减二的目的是减去第一行固定行和最后一行总计行(保留两行)//选择行料号,自动带出料号相关信息// $('#linedetail #item_no').data("eSelect",function(data){//     alert("111")//     // for(var i = 1; i < 50; i++){//     //     //求出每行的item_no值//     //     var item_no = $('#item_no' + i).val();//     //     if(item_no == ""){//     //     }//     //     else{//     //         $('#item_name'+ i).val(data.item_name);//将id为c-customer_contact的值更改为控制器中的customer_contacts//     //         $('#item_desc'+ i).val(data.item_desc);//币别//     //         $('#units'+ i).val(data.units);//币别 //     //     }//     // }// });Controller.api.bindevent();// //选择,自动带出客户相关信息// $('#c-customer_code').data("eSelect",function(data){//对需要改变的数据进行监听,如果选中id为c-customer_code的值,就更改下面的值//     $('#c-customer_contact').val(data.customer_contacts);//将id为c-customer_contact的值更改为控制器中的customer_contacts//     $('#c-currency_code').val(data.currency_code);//币别//     $('#c-ship_address').val(data.customer_address);//出货地址//     $('#c-yewu').val(data.employee_num);//业务员//     $('#c-yewu').selectPageRefresh();//刷新下拉列表以显示选项//     // $('#c-tax_name').val(data.tax_name);//税别//     // $('#c-tax_name').selectPageRefresh();//刷新下拉列表以显示选项//     $('#c-tax_flag').selectpicker('val', data.tax_flag);//是否含税//     $('#c-term_name').val(data.term_name);//付款条件//     $('#c-term_name').selectPageRefresh();//刷新下拉列表以显示选项// });//选择税别带出税率// $('#c-tax_name').data("eSelect",function(data){//对需要改变的数据进行监听,如果选中id为c-tax_name的值,就更改下面的值//     $('#c-tax_rate').val(data.tax_mount);//将id为c-tax_rate的值更改为控制器中的tax_mount// });//表单selectpage动态渲染,打开页面后仅渲染一次。通过js添加的selectpage需要手动触发渲染Form.events.selectpage($('#add-form'));// 实现提交表单之后不关闭弹窗// Form.api.bindevent($("form"), function(data,ret){//     //成功的回调,如果返回false,将不会出现提示消息//     // Toastr.success("生成成功");//     //return false;//这行代码阻止弹框关闭// }, function(data, ret){//     //失败的回调,如果返回false,将不会出现提示消息// }, function(success, error){//     //如果返回falsle,将阻止表单的提交//     //如果处理成功后我们可以使用Form.api.submit(this, success, error);再次提交表单// });},edit: function () {Controller.api.bindevent();},api: {bindevent: function () {Form.api.bindevent($("form[role=form]"));}}};return Controller;
});

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

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

相关文章

【软件测试】测试老鸟的迷途,进军高级自动化测试测试......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 很多从业几年的选手…

【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例&#xff0c;欢迎点赞&#xff0c;关注共同学习交流。 电影推荐系统 目录电影推荐系统1. 问题介绍1.1推荐系统矩阵分解方法介绍1.2 数据集&#xff1a;ml-100k2. 推荐系统实现2.1 定义矩阵分解函数2.2 …

消息中间件的概念

中间件(middleware)是基础软件的一大类&#xff0c;属于可复用的软件范畴。中间件在操作系统软件&#xff0c;网络和数据库之上&#xff0c;应用软件之下&#xff0c;总的作用是为处于自己上层的应用软件提供运行于开发的环境&#xff0c;帮助用户灵活、高效的开发和集成复杂的…

ICA简介:独立成分分析

1. 简介 您是否曾经遇到过这样一种情况&#xff1a;您试图分析一个复杂且高度相关的数据集&#xff0c;却对信息量感到不知所措&#xff1f;这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术&#xff0c;可让您分离和识别多元数据集中的底层独立来源。 …

PPP简介,PPP分层体系架构,PPP链路建立过程及PPP的帧格式

PPP&#xff08;Point-to-Point Protocol&#xff09;是一种用于在两个网络节点之间传输数据的通信协议。它最初是为在拨号网络上进行拨号连接而开发的&#xff0c;现在已经被广泛应用于各种网络环境中&#xff0c;例如在宽带接入、虚拟专用网&#xff08;VPN&#xff09;等场景…

【JAVA】一个项目如何预先加载数据?

这里写目录标题需求实现AutowiredPostConstruct实例CommandLineRunner实例ApplicationListener实例参考需求 一般我们可能会有一些在应用启动时加载资源的需求&#xff0c;局部或者全局使用&#xff0c;让我们来看看都有哪些方式实现。 实现 Autowired 如果是某个类里需求某…

[1]MyBatis+Spring+SpringMVC+SSM整合

一、MyBatis 1、MyBatis简介 1.1、MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c; iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。…

Vue中如何利用websocket实现实时通讯

首先我们可以先做一个简单的例子来学习一下简单的websocket模拟聊天对话的功能 原理很简单&#xff0c;有点像VUE中的EventBus&#xff0c;用emit和on传来传去 首先我们可以先去自己去用node搭建一个本地服务器 步骤如下 1.新建一个app.js&#xff0c;然后创建pagejson.js文…

【Linux】-- POSIX信号量

目录 POSIX信号量 sem_init - 初始化信号量 sem_destroy - 销毁信号量 sem_wait - 等待信号量&#xff08;P操作&#xff09; 基于环形队列的生产消费模型 数据结构 - 环形结构 实现原理 POSIX信号量 #问&#xff1a;什么是信号量&#xff1f; 1. 共享资源 -> 任何一…

【笔记】两台1200PLC进行S7 通信(1)

使用两台1200系列PLC进行S7通信&#xff08;入门&#xff09; 文章目录 目录 文章目录 前言 一、通信 1.概念 2.PLC通信 1.串口 2.网口 …

时间颗粒度选择(通过选择时间范围和颗粒度展示选项)

<template><div><el-time-selectplaceholder"起始时间"v-model"startTime":picker-options"startPickerOptions"change"changeStartTime"></el-time-select><el-time-selectplaceholder"结束时间&quo…

想招到实干派程序员?你需要这种面试法

技术招聘中最痛的点其实是不精准。技术面试官或CTO们常常会向我们吐槽&#xff1a; “我经常在想&#xff0c;能不能把我们项目中的代码打印出来&#xff0c;作为候选人的面试题的一部分&#xff1f;” “能不能把一个Bug带上环境&#xff0c;让候选人来试试怎么解决&#xf…

mysql中用逗号隔开的字段作查询用(find_in_set的使用)

mysql中用逗号隔开的字段作查询用(find_in_set的使用) 场景说明 在工作中&#xff0c;经常会遇到一对多的关系。想要在mysql中保存这种关系&#xff0c;一般有两种方式&#xff0c;一种是建立一张中间表&#xff0c;这样一条id就会存在多条记录。或者采用第二种方式&#xff…

【数据结构必会基础】关于树,你所必须知道的亿些概念

目录 1.什么是树 1.1浅显的理解树 1.2 数据结构中树的概念 2.树的各种结构概念 2.1 节点的度 2.2 根节点/叶节点/分支节点 2.3 父节点/子节点 2.4祖先节点/子孙节点 2.5兄弟节点 2.6树的度 2.7节点的层次 2.8森林 3. 如何用代码表示一棵树 3.1链式结构 3.1.1 树节…

Gitea Windows环境下服务搭建

前言&#xff1a;这篇文章没有去分析各大平台的优劣势&#xff0c;仅教学大家搭建一个属于自己的git代码管理器&#xff0c;主要作用在局域网内&#xff0c;办公电脑搭建一个简单的Gitea代码管理器。数据库使用SQLite3&#xff0c;环境是windows10。如果不是这个环境的话&#…

@Import注解的原理

此注解是springboot自动注入的关键注解&#xff0c;所以拿出来单独分析一下。 启动类的run方法跟进去最终找到refresh方法&#xff1b; 这里直接看这个org.springframework.context.support.AbstractApplicationContext#refresh方法即可&#xff0c;它下面有一个方法 invoke…

Node下载阿里OSS存储文件【不知目录结构】

前言&#xff1a;前端传模型ID&#xff0c;后台根据ID去阿里OSS存储下载对应文件&#xff08;不知文件内部层级结构&#xff0c;且OSS只能单个文件下载&#xff09;&#xff0c;打包成zip字节流形式返回给前端下载。 需求分析&#xff1a; 生成OSS文件关系树Node做文件下载存…

kafka(一) 的架构,各概念

Kafka架构 Kafak 总体架构图中包含多个概念&#xff1a; &#xff08;1&#xff09;ZooKeeper&#xff1a;Zookeeper负责保存broker集群元数据&#xff0c;并对控制器进行选举等操作。 &#xff08;2&#xff09;Producer&#xff1a; 生产者负责创建消息&#xff0c;将消息发…

【神经网络】LSTM为什么能缓解梯度消失

1.LSTM的结构 我们先来看一下LSTM的计算公式&#xff1a; 1.遗忘门&#xff1a; 2.输入门&#xff1a; 3.细胞状态 4.输出门 2.LSTM的梯度路径 根据LSTM的计算公式&#xff0c;可以得出LSTM的cell state与、、都存在计算关系&#xff0c;而、、的计算公式又全部都与有关&#x…

RPC异步化原理

深入RPC&#xff0c;更好使用RPC&#xff0c;须从RPC框架整体性能考虑问题。得知道如何提升RPC框架的性能、稳定性、安全性、吞吐量及如何在分布式下快速定位问题。RPC框架如何压榨单机吞吐量&#xff1f; 1 前言 TPS一直上不去&#xff0c;压测时CPU压到40%&#xff5e;50%就…