最终效果图:

首先我们需要修改一下主从结构的源码dwz.database.js,如下:

function tdHtml(field){
var html='',suffix='';
if(field.name.endsWith("[#index#]"))suffix="[#index#]";
else if(field.name.endsWith("[]"))suffix="[]";
var suffixFrag=suffix?' suffix="'+suffix+'" ':'';
switch(field.type){
case 'del':
html='<a href="#" onclick="calculate(this, 1);" class="btnDel '+field.fieldClass+'">刪除</a>';
break;
case 'lookup':
var suggestFrag='';
if(field.suggestFields){
suggestFrag='autocomplete="off" lookupGroup="'+field.lookupGroup+'"'+suffixFrag+' suggestUrl="'+field.suggestUrl+'" suggestFields="'+field.suggestFields+'"'+' postField="'+field.postField+'"';}
html='<input type="hidden" name="'+field.lookupGroup+'.'+field.lookupPk+suffix+'"/>'+'<input type="text" name="'+field.name+'"'+suggestFrag+' lookupPk="'+field.lookupPk+'" size="'+field.size+'" class="'+field.fieldClass+'" '+field.readOnly+' />'+'<a class="btnLook" href="'+field.lookupUrl+'" lookupGroup="'+field.lookupGroup+'" '+suggestFrag+' lookupPk="'+field.lookupPk+'" title="查找帶回">查找?回</a>';
break;
case 'attach':
html='<input type="hidden" name="'+field.lookupGroup+'.'+field.lookupPk+suffix+'"/>'+'<input type="text" name="'+field.name+'" size="'+field.size+'" class="'+field.fieldClass+'" '+field.readOnly+' />'+'<a class="btnAttach" href="'+field.lookupUrl+'" lookupGroup="'+field.lookupGroup+'" '+suggestFrag+' lookupPk="'+field.lookupPk+'" width="560" height="300" title="查找?回">查找?回</a>';
break;
case 'enum':
$.ajax({
type:"POST",dataType:"html",async:false,
url:field.enumUrl,
data:{inputName:field.name},
success:function(response){
html=response;}});
break;
case 'date':
html='<input type="text" name="'+field.name+'" value="'+field.defaultVal+'" class="date '+field.fieldClass+'" format="'+field.patternDate+'" size="'+field.size+'" '+field.readOnly+' />'+'<a class="inputDateButton" href="javascript:void(0)">??</a>';
break;
case 'lab':
html='<label>' + field.defaultVal + '</label>';
break;
case 'calculate':
html = '<input type="text" name="' + field.name + '" value="' + field.defaultVal + '" size="' + field.size + '" onkeyup="calculate(this, 0);" class="' + field.fieldClass + '" '+field.readOnly+' />';
break;
default:
html='<input type="text" name="'+field.name+'" value="'+field.defaultVal+'" size="'+field.size+'" class="'+field.fieldClass+'" '+field.readOnly+' />';
break;}
return '<td nowrap="nowrap">'+html+'</td>';
}

上面增加了一个calculate的文本类型,它加入onkeyup事件。

以下为Html部分代码:

<script type="text/javascript">
<!--
var total_amount = $("input[name=total_amount]");
var trade_amount = $("input[name=trade_amount]");
var odd_amount = $("input[name=odd_amount]");
var total_nums = $("input[name=total_nums]");
$(function(){ // 初始化應收金額和實收金額
total_amount.val((0).toFixed(2));
trade_amount.val((0).toFixed(2));
total_nums.val(0); // 扣除零頭
odd_amount.keyup(function(){
trade_amount.val((total_amount.val() - $(this).val()).toFixed(2));
});
}); function calculate(t, del){
var tbody = $(t).parents('tbody');
var total = 0;
var totalnums = 0;
var fix = 0;
var fixnums=0;// 刪除的話應該忽略本行
if (del == 1){
//alert(0);
$(t).parents("tr:first").each(function(){
var orgCount = 0;
var orgPrice = 0;
var orgDiscount = 1;
var orgTotal = 0;
$(this).find('input').each(function(){
if (this.name == 'items.orgCount[]') orgCount = this.value == '' ? 0 : this.value;
if (this.name == 'items.orgPrice[]') orgPrice = this.value == '' ? 0 : this.value;
if (this.name == 'items.orgDiscount[]') orgDiscount = this.value == '' ? 1 : (1 - this.value/100);
if (this.name == 'items.orgTotal[]'){
orgTotal = orgCount*orgPrice*orgDiscount;
if (orgTotal == 0){
this.value = '';
} else {
this.value = orgTotal.toFixed(2);
}
}
});
fix = orgTotal;
fixnums =orgCount;
});
}
$(tbody).find('tr').each(function(){
var orgCount = 0;
var orgPrice = 0;
var orgDiscount = 1;
var orgTotal = 0;
$(this).find('input').each(function(){
if (this.name == 'items.orgCount[]') orgCount = this.value == '' ? 0 : 1*this.value;
if (this.name == 'items.orgPrice[]') orgPrice = this.value == '' ? 0 : this.value;
if (this.name == 'items.orgDiscount[]') orgDiscount = this.value == '' ? 1 : (1 - this.value/100);
if (this.name == 'items.orgTotal[]'){
orgTotal = orgCount*orgPrice*orgDiscount;
if (orgTotal == 0){
this.value = '';
} else {
this.value = orgTotal.toFixed(2);
}
}
});
total += orgTotal;
totalnums +=orgCount;
});
if (fix != 0){
total -= fix;
totalnums -= fixnums;
}
total_nums.val(totalnums);
total_amount.val(total.toFixed(2));
trade_amount.val((total - odd_amount.val()).toFixed(2));
}
//-->
</script>
<h2 class="contentTitle">进货单(JH)</h2>
<form class="pageForm required-validate" action="__URL__/addOrders/navTabId/__MODULE__" method="post" onsubmit="return validateCallback(this, dialogAjaxDone)">
<div class="pageContent">
<div class="pageFormContent" layoutH="97">
<fieldset>
<table style="white-space: nowrap;">
<tr>
<td>单据编号:</td>
<td><input class="required" name="ordernumber" readonly="true" size="30" type="text" value="{$newCode}" /></td>
<td>单据日期:</td>
<td><input class="date required" name="ordertime" type="text" value="{$dtime}" /><a class="inputDateButton" href="javascript:;">选择</a></td>
</tr>
<tr>
<td>供货单位:</td>
<td>
<input id="sendName" name="sendName.id" value="" type="hidden"/>
<input class="required" name="sendName.orgName" type="text" postField="keyword" suggestFields="id" size="50" readonly="true" />
<a class="btnLook" href="__APP__/Public/ckBackContacts/tpy/2" lookupGroup="sendName" width="1000" height="450">查找带回</a>
</td>
<td>经  办  人:</td>
<td>
<input id="orderUser" name="orderUser.id" value="" type="hidden"/>
<input class="required" name="orderUser.orgName" type="text" postField="keyword" suggestFields="id" readonly="true" />
<a class="btnLook" href="__APP__/Public/ckBackUser/" lookupGroup="orderUser">查找带回</a>
</td>
</tr>
<tr>
<td>收货仓库:</td>
<td>
<input id="warehouse" name="warehouse.id" value="" type="hidden"/>
<input class="required" name="warehouse.orgName" type="text" postField="keyword" suggestFields="id" size="30" readonly="true" />
<a class="btnLook" href="__APP__/Public/ckBackWarehouse/" lookupGroup="warehouse">查找带回</a>
</td>
<td>發票號碼:</td>
<td><input name="invoices" size="30" type="text" /></td>
</tr>
<tr>
<td>单据摘要:</td>
<td colspan="3"><input name="remarks" size="120" type="text" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<table class="list nowrap itemDetail" addButton="添加商品行數" width="100%">
<thead>
<tr>
<th type="text" name="items.proid[]" fieldClass="readonly" readOnly size="2">編 號</th>
<th type="lookup" name="items.partnumber[]" lookupGroup="items" lookupUrl="__APP__/Public/ckBackProducts/flag/JH" suggestFields="partnumber" size="12" fieldClass="required">料 号</th>
<th type="text" name="items.prodname[]" fieldClass="readonly" size="22" readOnly>名 称</th>
<th type="text" name="items.prodsize[]" fieldClass="readonly" readOnly>規 格</th>
<th type="text" name="items.partmodel[]" fieldClass="readonly" readOnly>型 号</th>
<th type="text" name="items.pmaterial[]" fieldClass="readonly" readOnly>材 质</th>
<th type="text" name="items.unit[]" fieldClass="readonly" readOnly size="2">單 位</th>
<th type="calculate" name="items.orgCount[]" fieldClass="required" size="4">數 量</th>
<th type="calculate" name="items.orgPrice[]" size="5">单 价(¥)</th>
<th type="calculate" name="items.orgDiscount[]" size="2">折 扣(%)</th>
<th type="text" name="items.orgTotal[]" size="8" readOnly>金 额(¥)</th>
<th type="text" name="items.orgMark[]" size="15">备 注</th>
<th onclick="calculate(this,1)" type="del" fieldClass="refreshAmount">删行</th>
</tr>
</thead>
<tbody></tbody>
</table>
</fieldset>
</div>
<div class="formBar">
<label style="float:left">累计数量:<input name="total_nums" size="3" type="text" readonly="readonly" /></label>
<label style="float:left">  折扣金额:<input name="odd_amount" size="5" type="text" /></label>
<label style="float:left">  应付金额:<input name="total_amount" size="8" type="text" readonly="readonly" /></label>
<label style="float:left">  实付金额:<input name="trade_amount" size="8" type="text" /></label>
<label style="float:left">  制单人:<input name="createMan" value="{$Think.session.loginUserName}" size="10" type="text" readonly="true" /></label>
<label style="float: left;">  入库:<input type="checkbox" id="goStock" name="goStock" value="1" checked="checked" /></label>
<label style="float: left;">   付款:<input type="checkbox" id="goFunds" name="goFunds" value="1" checked="checked" /></label>
<label style="float:left">   付款账户:
<SELECT name="bankid">
<volist id="vu" name="listBank">
<option value="{$vu.id}">{$vu.bankname}</option>
</volist>
</SELECT>
</label>
<ul>
<li><div class="buttonActive"><div class="buttonContent"><button type="submit">提交单据</button></div></div></li>
<li><div class="button"><div class="buttonContent"><button class="close" type="button">关闭退出</button></div></div></li>
</ul>
</div>
</div>
</form>

DWZ主从结构计算的更多相关文章

  1. Angular2.js——主从结构

    学习这一篇的内容,还回到我们快速起步的应用上来. 主从结构,我们想要做一个英雄的列表,我们希望用户在列表中选中一个英雄,然后这个被选中的英雄出现在详情视图中.主视图是英雄列表,从视图则是被选中英雄的详 ...

  2. wpf企业应用之主从结构列表

    主从结构在企业级应用中相当常见,这里结合我的例子谈一下wpf中主从结构列表展示的常用做法,具体效果见 wpf企业级开发中的几种常见业务场景. 首先,Model有两种,主表对应model(假设为mode ...

  3. MySql5.5以上版本设置主从结构的例子

    为了实现读写分离,一般都需要先设置好mysql的主从结构,网上现有的mysql配置大都基于低版本,在5.5以上版本无法配置成功,所以参考了官方文档,写了这篇笔记. *主要参考Mysql 5.6的官方文 ...

  4. Redis主从结构主节点执行写入后wait命令对性能的影响

    这里的Redis主从结构可以是简单的主从,sentinel,redis cluster中的主从等. wait命令的作用:此命令将阻塞当前客户端,直到当前Session连接(主节点上)所有的写命令都被传 ...

  5. docker学习(四) - docker构建redis主从结构

    此文章假设你已经安装了docker,如果没有安装请查询本博客docker安装章节 容器网络 docker network ls  查看默认的网络 Docker安装后,默认会创建下面三种网络类型 在启动 ...

  6. DWZ主从表界面唯一性验证(后台验证)(三)

    之前的博客介绍了前台自写js来验证主动表的唯一性,除了前台的验证,我也学习了后台的一些判断. 再次介绍一下背景需求: 利用DWZ的主从表结构批量添加课程信息,在提交表单后,触发Action事件 1.是 ...

  7. DWZ主从表界面唯一性验证(自写js)(一)

    最近在项目中遇到一个问题,它的需求是: 利用DWZ的主从表结构批量添加课程信息,需要在触发课程代码文本框的离开事件时验证: 1.是否选择学院. 2.数据库里是否已存在该课程代码. 3.多条数据添加时, ...

  8. MySql数据库实现分布式的主从结构

    最近学习了关于使用MySql数据的实现主动结构的原理,在以前的并发访问低的场景一下,一般一台性能高的服务器作为一个MySql数据,就可以满足业务的增删改查场景,但是随着网络用户的增加 当出现高并发,高 ...

  9. Delphi ClientDataSet 主从结构 BUG

    使用ADO控件 .ClientDataSet .增加了从表与主表的关连字段 SheetID,别的设置全为默认.如图1所示 图1 ======= 问题 BUG: 打开主表与从表,先不对主表进行任何操作. ...

随机推荐

  1. js调用swift相册DEMO(网易新闻)

    关键代码 window.location.href = 'tg:///openCamera' css body{ } img{ width:100%; } #mainTitle{ text-align ...

  2. IoC容器Autofac正篇之类型注册(四)

    Autofac类型注册 类型注册简单的从字面去理解就可以了,不必复杂化,只是注册的手段比较丰富. (一)类型/泛型注册 builder.RegisterType<Class1>(); 这种 ...

  3. Javascript的性能瓶颈

    Javascript是单线程的,它的性能瓶颈在于频繁的DOM操作, 因为每次操作都会使浏览器重新绘制一次. 其实纯JS的执行的速度是很快的,可以把元素都攒到一块,一次性放到页面中. 或者,定义一个延时 ...

  4. axure 8.0 动态特效库分享

    认准品牌 六脉神掌 尽量给每一个交互加上效果,尽量模拟真实的交互 无图无真相,我们先看效果图 1 这是还原Android Material Design风格的一个底部菜单效果 2 这个是模拟欢迎页面 ...

  5. WCF入门教程系列三

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  6. shell中的退出状态码

    shell中的退出状态码最大只有255,如果超过这个值,就会进行取余运算,即如果执行如下命令: exit exitCode 如果exitCode大于255,那么实际的状态码为exitCode % 25 ...

  7. 单机/伪分布式Hadoop2.4.1安装文档

    转载自官方文档,最新版请见:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/SingleCluster.h ...

  8. 学了一个封装的jquery插件,感觉还成

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 连接oracle数据库出现:ORA-12505,TNS:listener does not currently know of SID given in connect descriptor

    Java使用 jdbc:oracle:thin:@11.1.0.14:1521:orcl 连接oracle数据库出现: ORA-12505,TNS:listener does not currentl ...

  10. More is better(hdu 1856 计算并查集集合中元素个数最多的集合)

    More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) ...