1. 【新增】售后单售后原因类型支持搜索

2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
This commit is contained in:
chenping
2026-04-01 11:59:17 +08:00
parent 9341122827
commit 61783b7d01
754 changed files with 46179 additions and 5700 deletions

View File

@@ -32,17 +32,19 @@
</thead>
<tbody>
<{foreach from=$conf.objs item=obj}>
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" >
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="obj_bn <{$obj.obj_type}>class">
<span class="number"><{$obj.bn}></span>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" /></td>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" />
<{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="giftpackage[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="obj_name"><{$obj.name}><input name="giftpackage_ids[]" id="giftpackage_ids_<{$obj.obj_id}>" type="text" value="<{$obj.goods_id}>" style="display:none;" /></td>
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="giftpackage[obj][<{$obj.obj_id}>][]" />
<input atype="num" aid="<{$obj.obj_id}>" name="giftpackage[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="giftpackage[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" value="<{$obj.pmt_price|default:0}>" class="giftpackage_pmt_price" name="giftpackage[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<input atype="num" aid="<{$obj.obj_id}>" name="giftpackage[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="giftpackage[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" value="<{$obj.pmt_price|default:0}>" class="giftpackage_pmt_price" name="giftpackage[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalgiftpackage(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_total"><input type="text" class="giftpackagetotal" style="display:none" id="giftpackagetotal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="giftpackagesalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> giftpackagesaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="giftpackagepmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> giftpackagepmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="giftpackagepartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
<{if $obj.delete == 'false'}>
@@ -90,6 +92,7 @@
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" value="<{$obj.pmt_price|default:0}>" class="giftpackage_pmt_price" name="giftpackage[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalgiftpackage(this);total();"<{/if}> /></td>
<td class="obj_total"><input type="text" class="giftpackagetotal" style="display:none" id="giftpackagetotal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="giftpackagesalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> giftpackagesaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="giftpackagepmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> giftpackagepmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="giftpackagepartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
<{if empty($obj.make_nums)}>
@@ -565,4 +568,4 @@ function split_changetotalgiftpackage(e){
}
}
}
</script>
</script>

View File

@@ -41,20 +41,23 @@
</thead>
<tbody>
<{foreach from=$conf.objs item=obj}>
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" >
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="obj_bn <{$obj.obj_type}>class">
<span class="number"><{$obj.bn}></span>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" /></td>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" />
<{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="goods[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="obj_name"><{$obj.name}><input name="goods_ids[]" id="goods_ids_<{$obj.obj_id}>" type="text" value="<{$obj.goods_id}>" style="display:none;" /></td>
<!--<td class="item_addon"><{$item.addon}></td> -->
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="goods[obj][<{$obj.obj_id}>][]" />
<input atype="num" aid="<{$obj.obj_id}>" name="goods[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="goods[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<input atype="num" aid="<{$obj.obj_id}>" name="goods[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="goods[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" value="<{$obj.pmt_price|default:0}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" class="goods_pmt_price" name="goods[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" value="<{$obj.pmt_price|default:0}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" class="goods_pmt_price" name="goods[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalgoods(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_total"><input type="text" class="goodstotal" style="display:none" id="goodstotal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="goodssalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> goodssaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="goodspmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> goodspmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="goodspartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="goodsdivideorderfee_<{$obj.obj_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
@@ -93,14 +96,15 @@
</thead>
<tbody>
<{foreach from=$conf.objs item=obj}>
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" >
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="obj_bn <{$obj.obj_type}>class">
<span class="number"><{$obj.bn}></span>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" /></td>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" />
<{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="goods[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="obj_name"><{$obj.name}><input name="goods_ids[]" id="goods_ids_<{$obj.obj_id}>" type="text" value="<{$obj.goods_id}>" style="display:none;" /></td>
<!-- <td class="item_addon"><{$obj.addon}></td> -->
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="goods[obj][<{$obj.obj_id}>][]" /><input atype="num" aid="<{$obj.obj_id}>" name="goods[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_goods_nums_<{$obj.obj_id}>" /></td>
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="goods[obj][<{$obj.obj_id}>][]" /><input atype="num" aid="<{$obj.obj_id}>" name="goods[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_goods_nums_<{$obj.obj_id}>" /></td>
<td class="obj_buy_nums">
<{if $obj.left_nums <= 0}>
@@ -111,12 +115,14 @@
<{if $obj.make_nums}><br />(<font color="#f00;">已发货:<{$obj.make_nums}></font>)<input type="hidden" value="<{$obj.make_nums}>" id="split_send_<{$obj.obj_id}>" /><{/if}>
</td>
<td class="obj_price"><input name="goods[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalgoods(this);total();"<{/if}> /></td>
<td class="obj_price"><input name="goods[price][<{$obj.obj_id}>]" type="text" size="8" value="<{$obj.price}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalgoods(this);total();"<{/if}> /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="goods_pmt_price" name="goods[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalgoods(this);total();"<{/if}> /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="goods_pmt_price" name="goods[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalgoods(this);total();"<{/if}> /></td>
<td class="obj_total"><input type="text" class="goodstotal" style="display:none" id="goodstotal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="goodssalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> goodssaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="goodspmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> goodspmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="goodspartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="goodsdivideorderfee_<{$obj.obj_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
@@ -244,6 +250,39 @@ function edit_checked(obj_id,$obj_bn){
function changetotalgoods(e){
var id = e.get('aid'),l=0,_ca = e.getNext('.error');
if(e.disable) return;
// 检查是否有oid限制
var tr = e.getParent('tr');
var hasOidLimit = tr && tr.get('data-oid') && tr.get('data-oid') != '-1';
var originalQuantity = null;
var originalSalePrice = null;
var originalDivideOrderFee = null;
var originalPmtPrice = null;
if(hasOidLimit) {
var numInput = $('num_'+id);
if(numInput && numInput.get('data-original-quantity')) {
originalQuantity = parseFloat(numInput.get('data-original-quantity'));
}
if($('goodssalepr_'+id)) {
originalSalePrice = parseFloat($('goodssalepr_'+id).get('data-original-sale-price') || $('goodssalepr_'+id).value);
if(!$('goodssalepr_'+id).get('data-original-sale-price')) {
$('goodssalepr_'+id).set('data-original-sale-price', originalSalePrice);
}
}
// 直接读取obj层的divide_order_fee
if($('goodsdivideorderfee_'+id)) {
originalDivideOrderFee = parseFloat($('goodsdivideorderfee_'+id).value || 0);
}
// 获取原始的商品优惠价格
if($('pmt_'+id)) {
originalPmtPrice = parseFloat($('pmt_'+id).get('data-original-pmt-price') || $('pmt_'+id).value || 0);
if(!$('pmt_'+id).get('data-original-pmt-price')) {
$('pmt_'+id).set('data-original-pmt-price', originalPmtPrice);
}
}
}
if (/^\d+(\.\d+)?$/.test(e.value)){
if(e.get('atype') == 'num'){
if (parseInt(e.value) <= 0){
@@ -252,7 +291,44 @@ function changetotalgoods(e){
e.set('value', '0');
}
return;
}else{
}
// oid限制验证数量只能改小
if(hasOidLimit && originalQuantity !== null) {
var newQuantity = parseFloat(e.value);
if(newQuantity > originalQuantity) {
if (!_ca){
new Element('span',{'class':'error caution notice-inline',html:'数量不能大于原数量 '+originalQuantity}).injectAfter(e);
}
e.set('value', originalQuantity);
return;
} else {
if (_ca) _ca.remove();
}
// 按比例计算销售价和实付
if(originalSalePrice !== null && originalQuantity > 0) {
var ratio = newQuantity / originalQuantity;
var newSalePrice = (originalSalePrice * ratio).toFixed(2);
$('goodssalepr_'+id).set('value', newSalePrice);
if(originalDivideOrderFee !== null) {
var newDivideOrderFee = (originalDivideOrderFee * ratio).toFixed(2);
// newPmtPrice 按比例计算,和 newSalePrice 一样的计算方式
var newPmtPrice = (originalPmtPrice * ratio).toFixed(2);
$('pmt_'+id).set('value', newPmtPrice);
// 计算并更新part_mjz_discount = sale_price - divide_order_fee
var newPartMjzDiscount = (parseFloat(newSalePrice) - parseFloat(newDivideOrderFee)).toFixed(2);
if ($('goodspartmjz_'+id)) {
$('goodspartmjz_'+id).set('value', newPartMjzDiscount);
}
}
$('goodstotal_'+id).value = (parseFloat($('num_'+id).value) * parseFloat($('pr_'+id).value)).toFixed(3);
return;
}
} else {
if (_ca) _ca.remove();
}
@@ -291,6 +367,15 @@ function changetotalgoods(e){
}
}else if (e.get('atype') == 'price'){
// oid限制单价不可修改
if(hasOidLimit) {
var originalPrice = parseFloat($('pr_'+id).get('data-original-price') || $('pr_'+id).value);
if(!$('pr_'+id).get('data-original-price')) {
$('pr_'+id).set('data-original-price', originalPrice);
}
e.set('value', originalPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
@@ -339,6 +424,15 @@ function changetotalgoods(e){
$('goodstotal_'+oid).value = parseFloat(goodstotalsub).toFixed(3);
}
}else if (e.get('atype') == 'pmt_price'){
// oid限制优惠价格不可修改
if(hasOidLimit) {
var originalPmtPrice = parseFloat($('pmt_'+id).get('data-original-pmt-price') || $('pmt_'+id).value);
if(!$('pmt_'+id).get('data-original-pmt-price')) {
$('pmt_'+id).set('data-original-pmt-price', originalPmtPrice);
}
e.set('value', originalPmtPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
@@ -413,6 +507,32 @@ $('goods_list').getElements("input[atype]").each(function(e){
changetotalgoods(e);
});
// 初始化oid限制的原始值
$('goods_list').getElements('tr[data-oid]').each(function(tr){
var oid = tr.get('data-oid');
if(oid && oid != '-1') {
var aid = tr.get('aid');
var numInput = $('num_'+aid);
var priceInput = $('pr_'+aid);
var pmtInput = $('pmt_'+aid);
var salePriceInput = $('goodssalepr_'+aid);
if(numInput && !numInput.get('data-original-quantity')) {
numInput.set('data-original-quantity', numInput.value);
}
if(priceInput && !priceInput.get('data-original-price')) {
priceInput.set('data-original-price', priceInput.value);
}
if(pmtInput && !pmtInput.get('data-original-pmt-price')) {
pmtInput.set('data-original-pmt-price', pmtInput.value || 0);
}
if(salePriceInput && !salePriceInput.get('data-original-sale-price')) {
salePriceInput.set('data-original-sale-price', salePriceInput.value);
}
// 直接读取obj层的divide_order_fee不需要计算
}
});
function total_goods(){
var total = 0,amount = 0;
$('goods_list').getElements("input.goodstotal").each(function(item,k){

View File

@@ -40,20 +40,21 @@
<{assign var='lkb_del' value="false"}>
<{/if}>
<{/foreach}>
<tr class="bindtitle" lkb-type="lkb" g-id="<{$obj.goods_id}>" lkb-id="<{$obj.goods_id}>" <{if $lkb_del=='true'}>style="background-color: #D8D8D8;" lkb-del='b'<{else}> lkb-del="a"<{/if}>>
<td class="goods_bn"><{$obj.bn}></td>
<tr class="bindtitle" lkb-type="lkb" g-id="<{$obj.goods_id}>" lkb-id="<{$obj.goods_id}>" <{if $lkb_del=='true'}>style="background-color: #D8D8D8;" lkb-del='b'<{else}> lkb-del="a"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="goods_bn"><{$obj.bn}><{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="lkb[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="goods_name"><{$obj.name}></td>
<td class="goods_num">
<input type="text" id="lkbnum_<{$obj.goods_id}>" lkb-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="lkb[num][<{$obj.obj_id}>]" size="4" <{if $lkb_del == 'true'}>disabled="true"<{/if}> onchange="changetotallkb(this);total();" />
<input type="text" id="lkbnum_<{$obj.goods_id}>" lkb-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="lkb[num][<{$obj.obj_id}>]" size="4" <{if $lkb_del == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> onchange="changetotallkb(this);total();" />
</td>
<td class="goods_price"><span id="lkbpr_<{$obj.goods_id}>"><{$obj.price}></span><input type="hidden" name="lkb[price][<{$obj.obj_id}>]" value="<{$obj.price}>"/></td>
<td class="goods_num">
<input type="text" id="lkbpmtpr_<{$obj.goods_id}>" lkb-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="lkb[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $lkb_del == 'true'}>disabled="true"<{/if}> onchange="changetotallkb(this);total();" />
<input type="text" id="lkbpmtpr_<{$obj.goods_id}>" lkb-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="lkb[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $lkb_del == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotallkb(this);total();" />
</td>
<td class="goods_num">
<input type="text" class="lkbtotal" style="display:none" id="lkbtotal_<{$obj.goods_id}>" size="2" value="0" <{if $lkb_del == 'true'}>disabled="true"<{/if}> />
<input type="text" size="5" id="lkbsalepr_<{$obj.goods_id}>" class="none_input lkbsaleprice" readonly="readonly" value="<{$obj.sale_price}>" <{if $lkb_del == 'true'}>disabled="true"<{/if}> >
<input type="hidden" size="5" id="lkbpmtorderpr_<{$obj.goods_id}>" class="none_input lkbpmtorderprice" readonly="readonly" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="lkbpartmjz_<{$obj.goods_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
</td>
<td class="goods_op">
<{if empty($item.make_nums)}>
@@ -128,6 +129,7 @@
<input type="text" class="lkbtotal" style="display:none" id="lkbtotal_<{$obj.goods_id}>" size="2" value="0" <{if $item.delete == 'true'}>disabled="true"<{/if}> />
<input type="text" size="5" id="lkbsalepr_<{$obj.goods_id}>" class="none_input lkbsaleprice" readonly="readonly" value="<{$obj.sale_price}>" <{if $item.delete == 'true'}>disabled="true"<{/if}> >
<input type="hidden" size="5" id="lkbpmtorderpr_<{$obj.goods_id}>" class="none_input lkbpmtorderprice" readonly="readonly" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="lkbpartmjz_<{$obj.goods_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
</td>
<td class="goods_op">

View File

@@ -43,18 +43,20 @@
<{assign var='pkg_del' value="false"}>
<{/if}>
<{/foreach}>
<tr class="bindtitle" pkg-type="pkg" g-id="<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" <{if $pkg_del=='true'}>style="background-color: #D8D8D8;" pkg-del='b'<{else}> pkg-del="a"<{/if}>>
<td class="goods_bn"><{$obj.bn}></td>
<tr class="bindtitle" pkg-type="pkg" g-id="<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" <{if $pkg_del=='true'}>style="background-color: #D8D8D8;" pkg-del='b'<{else}> pkg-del="a"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="goods_bn"><{$obj.bn}><{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="pkg[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="goods_name"><{$obj.name}></td>
<!--
<td class="goods_addon">捆绑商品</td>
-->
<td class="goods_num"><input type="text" id="pkgnum_<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="pkg[num][<{$obj.obj_id}>]" size="4" <{if $pkg_del == 'true'}>disabled="true"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_price"><input type="text" id="pkgpr_<{$obj.goods_id}>" atype="price_obj" aid="<{$obj.goods_id}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" name="pkg[price][<{$obj.obj_id}>]" size="8" <{if $pkg_del == 'true'}>disabled="true"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_num"><input type="text" id="pkgnum_<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="pkg[num][<{$obj.obj_id}>]" size="4" <{if $pkg_del == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_price"><input type="text" id="pkgpr_<{$obj.goods_id}>" atype="price_obj" aid="<{$obj.goods_id}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" name="pkg[price][<{$obj.obj_id}>]" size="8" <{if $pkg_del == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_num"><input type="text" id="pkgpmtpr_<{$obj.goods_id}>" pkg-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="pkg[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $pkg_del == 'true'}>disabled="true"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_num"><input type="text" id="pkgpmtpr_<{$obj.goods_id}>" pkg-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="pkg[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $pkg_del == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalpkg(this);total();" /></td>
<td class="goods_num"><input type="text" class="pkgtotal" style="display:none" id="pkgtotal_<{$obj.goods_id}>" size="2" value="0" <{if $item.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="pkgsalepr_<{$obj.goods_id}>" class="none_input pkgsaleprice" readonly="readonly" value="<{$obj.sale_price}>" <{if $item.delete == 'true'}>disabled="true"<{/if}> >
<input type="hidden" size="5" id="pkgpmtorderpr_<{$obj.goods_id}>" class="none_input pkgpmtorderprice" readonly="readonly" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="pkgpartmjz_<{$obj.goods_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="pkgdivideorderfee_<{$obj.goods_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="goods_op">
@@ -113,14 +115,14 @@
<{assign var='pkg_del' value="false"}>
<{/if}>
<{/foreach}>
<tr class="bindtitle" pkg-type="pkg" g-id="<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" <{if $pkg_del=='true'}>style="background-color: #D8D8D8;" pkg-del='b'<{else}> pkg-del="a"<{/if}>>
<td class="goods_bn"><{$obj.bn}></td>
<tr class="bindtitle" pkg-type="pkg" g-id="<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" <{if $pkg_del=='true'}>style="background-color: #D8D8D8;" pkg-del='b'<{else}> pkg-del="a"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="goods_bn"><{$obj.bn}><{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="pkg[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="goods_name"><{$obj.name}></td>
<!--
<td class="goods_addon">捆绑商品</td>
-->
<td class="goods_num"><input type="text" id="pkgnum_<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="pkg[num][<{$obj.obj_id}>]" size="4" <{if $pkg_del == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_pkg_nums_<{$obj.goods_id}>" /></td>
<td class="goods_num"><input type="text" id="pkgnum_<{$obj.goods_id}>" pkg-id="<{$obj.goods_id}>" aid="<{$obj.goods_id}>" vtype="required&&unsignedint" atype="num_obj" value="<{$obj.quantity}>" name="pkg[num][<{$obj.obj_id}>]" size="4" <{if $pkg_del == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_pkg_nums_<{$obj.goods_id}>" /></td>
<td class="pkg_buy_nums">
<{if $obj.left_nums <= 0}>
@@ -131,12 +133,14 @@
<{if $obj.make_nums}><br />(<font color="#f00;">已发货:<{$obj.make_nums}></font>)<input type="hidden" value="<{$obj.make_nums}>" id="split_pkg_send_<{$obj.goods_id}>" /><{/if}>
</td>
<td class="goods_price"><input type="text" id="pkgpr_<{$obj.goods_id}>" atype="price_obj" aid="<{$obj.goods_id}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" name="pkg[price][<{$obj.obj_id}>]" size="8" <{if $pkg_del == 'true'}>disabled="true"<{elseif $item.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpkg(this);total();"<{/if}> /></td>
<td class="goods_price"><input type="text" id="pkgpr_<{$obj.goods_id}>" atype="price_obj" aid="<{$obj.goods_id}>" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" name="pkg[price][<{$obj.obj_id}>]" size="8" <{if $pkg_del == 'true'}>disabled="true"<{elseif $item.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpkg(this);total();"<{/if}> /></td>
<td class="goods_num"><input type="text" id="pkgpmtpr_<{$obj.goods_id}>" pkg-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="pkg[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $pkg_del == 'true'}>disabled="true"<{elseif $item.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpkg(this);total();"<{/if}> /></td>
<td class="goods_num"><input type="text" id="pkgpmtpr_<{$obj.goods_id}>" pkg-id="" aid="<{$obj.goods_id}>" atype="pmt_price_obj" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" vtype="unsigned" class="goods_pmt_price" name="pkg[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $pkg_del == 'true'}>disabled="true"<{elseif $item.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpkg(this);total();"<{/if}> /></td>
<td class="goods_num"><input type="text" class="pkgtotal" style="display:none" id="pkgtotal_<{$obj.goods_id}>" size="2" value="0" <{if $item.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="pkgsalepr_<{$obj.goods_id}>" class="none_input pkgsaleprice" readonly="readonly" value="<{$obj.sale_price}>" <{if $item.delete == 'true'}>disabled="true"<{/if}> >
<input type="hidden" size="5" id="pkgpmtorderpr_<{$obj.goods_id}>" class="none_input pkgpmtorderprice" readonly="readonly" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="pkgpartmjz_<{$obj.goods_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="pkgdivideorderfee_<{$obj.goods_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="goods_op">
@@ -181,6 +185,40 @@ $('pkg_list').getElements("input[atype]").each(function(e){
changetotalpkg(e);
});
// 初始化oid限制的原始值
$('pkg_list').getElements('tr.bindtitle[data-oid]').each(function(tr){
var oid = tr.get('data-oid');
if(oid && oid != '-1') {
var aid = tr.get('pkg-id');
var numInput = $('pkgnum_'+aid);
var priceInput = $('pkgpr_'+aid);
var pmtInput = $('pkgpmtpr_'+aid);
var salePriceInput = $('pkgsalepr_'+aid);
if(numInput && !numInput.get('data-original-quantity')) {
numInput.set('data-original-quantity', numInput.value);
}
if(priceInput && !priceInput.get('data-original-price')) {
priceInput.set('data-original-price', priceInput.value);
}
if(pmtInput && !pmtInput.get('data-original-pmt-price')) {
pmtInput.set('data-original-pmt-price', pmtInput.value || 0);
}
if(salePriceInput && !salePriceInput.get('data-original-sale-price')) {
salePriceInput.set('data-original-sale-price', salePriceInput.value);
}
if($('pkgpmtorderpr_'+aid) && !$('pkgpmtorderpr_'+aid).get('data-original-divide-order-fee')) {
var pmtOrderPrice = parseFloat($('pkgpmtorderpr_'+aid).value || 0);
var originalSalePrice = parseFloat(salePriceInput.value || 0);
// 直接读取obj层的divide_order_fee
var originalDivideOrderFee = 0;
if($('pkgdivideorderfee_'+aid)) {
originalDivideOrderFee = parseFloat($('pkgdivideorderfee_'+aid).value || 0);
}
}
}
});
function total_pkg(){
var total = 0, amount=0;
$('pkg_list').getElements("input.pkgtotal").each(function(item){
@@ -196,6 +234,45 @@ function changetotalpkg(e){
var id = e.get('aid'),l=0,_ca = e.getNext('.error');
if(e.disable) return;
// 检查是否有oid限制
var tr = e.getParent('tr');
while(tr && !tr.hasClass('bindtitle')) {
tr = tr.getPrevious('tr');
}
var hasOidLimit = tr && tr.get('data-oid') && tr.get('data-oid') != '-1';
var originalQuantity = null;
var originalSalePrice = null;
var originalDivideOrderFee = null;
var originalPmtPrice = null;
if(hasOidLimit) {
var numInput = $('pkgnum_'+id);
if(numInput && numInput.get('data-original-quantity')) {
originalQuantity = parseFloat(numInput.get('data-original-quantity'));
}
if($('pkgsalepr_'+id)) {
originalSalePrice = parseFloat($('pkgsalepr_'+id).get('data-original-sale-price') || $('pkgsalepr_'+id).value);
if(!$('pkgsalepr_'+id).get('data-original-sale-price')) {
$('pkgsalepr_'+id).set('data-original-sale-price', originalSalePrice);
}
}
if($('pkgpmtorderpr_'+id)) {
var pmtOrderPrice = parseFloat($('pkgpmtorderpr_'+id).value || 0);
// 直接读取obj层的divide_order_fee
if($('pkgdivideorderfee_'+id)) {
originalDivideOrderFee = parseFloat($('pkgdivideorderfee_'+id).value || 0);
}
}
// 获取原始的商品优惠价格
if($('pkgpmtpr_'+id)) {
originalPmtPrice = parseFloat($('pkgpmtpr_'+id).get('data-original-pmt-price') || $('pkgpmtpr_'+id).value || 0);
if(!$('pkgpmtpr_'+id).get('data-original-pmt-price')) {
$('pkgpmtpr_'+id).set('data-original-pmt-price', originalPmtPrice);
}
}
}
if (/^\d+(\.\d+)?$/.test(e.value)){
if(e.get('atype') == 'num_obj'){
if (parseInt(e.value) <= 0){
@@ -204,9 +281,55 @@ function changetotalpkg(e){
e.set('value', '0');
}
return;
}else{
}
// oid限制验证数量只能改小
if(hasOidLimit && originalQuantity !== null) {
var newQuantity = parseFloat(e.value);
if(newQuantity > originalQuantity) {
if (!_ca){
new Element('span',{'class':'error caution notice-inline',html:'数量不能大于原数量 '+originalQuantity}).injectAfter(e);
}
e.set('value', originalQuantity);
return;
} else {
if (_ca) _ca.remove();
}
// 按比例计算销售价和实付
if(originalSalePrice !== null && originalQuantity > 0) {
var ratio = newQuantity / originalQuantity;
var newSalePrice = (originalSalePrice * ratio).toFixed(2);
$('pkgsalepr_'+id).set('value', newSalePrice);
if(originalDivideOrderFee !== null) {
var newDivideOrderFee = (originalDivideOrderFee * ratio).toFixed(2);
// newPmtPrice 按比例计算,和 newSalePrice 一样的计算方式
var newPmtPrice = (originalPmtPrice * ratio).toFixed(2);
$('pkgpmtpr_'+id).set('value', newPmtPrice);
// 计算并更新part_mjz_discount = sale_price - divide_order_fee
var newPartMjzDiscount = (parseFloat(newSalePrice) - parseFloat(newDivideOrderFee)).toFixed(2);
if ($('pkgpartmjz_'+id)) {
$('pkgpartmjz_'+id).set('value', newPartMjzDiscount);
}
}
$('pkgtotal_'+id).value = (parseFloat($('pkgnum_'+id).value) * parseFloat($('pkgpr_'+id).value)).toFixed(3);
if (e.get('pkg-id') != null || e.get('pkg-id') != ''){
$('pkg_list').getElements('input[type=text]').each(function (eee){
if (eee.get('pg-id') == e.get('pkg-id')){
eee.value = eee.get('js')*e.value;
}
});
}
return;
}
} else {
if (_ca) _ca.remove();
}
if (e.get('pkg-id') != null || e.get('pkg-id') != ''){
$('pkg_list').getElements('input[type=text]').each(function (eee){
if (eee.get('pg-id') == e.get('pkg-id')){
@@ -216,6 +339,16 @@ function changetotalpkg(e){
}
$('pkgtotal_'+id).value = parseFloat($('pkgnum_'+id).value).toFixed(3)*parseFloat($('pkgpr_'+id).value).toFixed(3);
}else if (e.get('atype') == 'price_obj'){
// oid限制单价不可修改
if(hasOidLimit) {
var originalPrice = parseFloat($('pkgpr_'+id).get('data-original-price') || $('pkgpr_'+id).value);
if(!$('pkgpr_'+id).get('data-original-price')) {
$('pkgpr_'+id).set('data-original-price', originalPrice);
}
e.set('value', originalPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
new Element('span',{'class':'error caution notice-inline',html:'请录入不小于0的数'}).injectAfter(e);
@@ -237,6 +370,16 @@ function changetotalpkg(e){
if (_ca) _ca.remove();
}
}else if (e.get('atype') == 'pmt_price_obj'){
// oid限制优惠价格不可修改
if(hasOidLimit) {
var originalPmtPrice = parseFloat($('pkgpmtpr_'+id).get('data-original-pmt-price') || $('pkgpmtpr_'+id).value);
if(!$('pkgpmtpr_'+id).get('data-original-pmt-price')) {
$('pkgpmtpr_'+id).set('data-original-pmt-price', originalPmtPrice);
}
e.set('value', originalPmtPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
new Element('span',{'class':'error caution notice-inline',html:'请录入不小于0的数'}).injectAfter(e);

View File

@@ -32,17 +32,20 @@
</thead>
<tbody>
<{foreach from=$conf.objs item=obj}>
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" >
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="obj_bn <{$obj.obj_type}>class">
<span class="number"><{$obj.bn}></span>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" /></td>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" />
<{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="pko[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="obj_name"><{$obj.name}><input name="pko_ids[]" id="pko_ids_<{$obj.obj_id}>" type="text" value="<{$obj.goods_id}>" style="display:none;" /></td>
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="pko[obj][<{$obj.obj_id}>][]" />
<input atype="num" aid="<{$obj.obj_id}>" name="pko[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="pko[price][<{$obj.obj_id}>]" type="text" size="8" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="pko_pmt_price" name="pko[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<input atype="num" aid="<{$obj.obj_id}>" name="pko[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" vtype="required&&unsignedint" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_price"><input name="pko[price][<{$obj.obj_id}>]" type="text" size="8" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="pko_pmt_price" name="pko[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif !empty($obj.oid) && $obj.oid != '-1'}>readonly="readonly" style="color:#666;"<{/if}> onchange="changetotalpko(this);total();" onclick='edit_checked("<{$obj.obj_id}>","<{$obj.bn}>");' /></td>
<td class="obj_total"><input type="text" class="pkototal" style="display:none" id="pkototal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="pkosalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> pkosaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="pkopmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> pkopmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="pkopartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="pkodivideorderfee_<{$obj.obj_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
<{if $obj.delete == 'false'}>
@@ -72,12 +75,13 @@
</thead>
<tbody>
<{foreach from=$conf.objs item=obj}>
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" >
<tr id="tr_<{$obj.obj_id}>" oid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>style="background-color: #DBDBDB;" g-del="b" class='disabled'<{else}>g-del="a"<{/if}> g-type="<{$obj.obj_type}>" g-pid="<{$obj.goods_id}>" g-shop-pid="<{$obj.shop_goods_id}>" aid="<{$obj.obj_id}>" g-bn="<{$obj.bn}>" g-pname="<{$obj.name}>" <{if !empty($obj.oid) && $obj.oid != '-1'}>data-oid="<{$obj.oid}>"<{/if}>>
<td class="obj_bn <{$obj.obj_type}>class">
<span class="number"><{$obj.bn}></span>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" /></td>
<input type="hidden" value="<{$obj.bn}>" name="bn_list[]" />
<{if !empty($obj.oid) && $obj.oid != '-1'}><input type="hidden" name="pko[oid][<{$obj.obj_id}>]" value="<{$obj.oid}>" /><{/if}></td>
<td class="obj_name"><{$obj.name}><input name="pko_ids[]" id="pko_ids_<{$obj.obj_id}>" type="text" value="<{$obj.goods_id}>" style="display:none;" /></td>
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="pko[obj][<{$obj.obj_id}>][]" /><input atype="num" aid="<{$obj.obj_id}>" name="pko[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_pko_nums_<{$obj.obj_id}>" /></td>
<td class="obj_num"><input type="hidden" value="<{$obj.obj_id}>" name="pko[obj][<{$obj.obj_id}>][]" /><input atype="num" aid="<{$obj.obj_id}>" name="pko[num][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.quantity}>" id="num_<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{else}>readonly="readonly" style="color:#666;"<{/if}> <{if !empty($obj.oid) && $obj.oid != '-1'}>data-original-quantity="<{$obj.quantity}>"<{/if}> /><input type="hidden" value="<{$obj.quantity}>" id="old_pko_nums_<{$obj.obj_id}>" /></td>
<td class="obj_buy_nums">
<{if $obj.left_nums <= 0}>
<input aid="<{$obj.obj_id}>" name="pko[item_buy_nums][<{$obj.obj_id}>]" type="text" size="5" value="<{$obj.left_nums}>" id="item_buy_nums_<{$obj.obj_id}>" disabled="true" />
@@ -86,10 +90,12 @@
<{/if}>
<{if $obj.make_nums}><br />(<font color="#f00;">已发货:<{$obj.make_nums}></font>)<input type="hidden" value="<{$obj.make_nums}>" id="split_send_<{$obj.obj_id}>" /><{/if}>
</td>
<td class="obj_price"><input name="pko[price][<{$obj.obj_id}>]" type="text" size="8" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpko(this);total();"<{/if}> /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="pko_pmt_price" name="pko[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpko(this);total();"<{/if}> /></td>
<td class="obj_price"><input name="pko[price][<{$obj.obj_id}>]" type="text" size="8" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.price}>" vtype="required&&unsigned" atype="price" id="pr_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpko(this);total();"<{/if}> /></td>
<td class="obj_pmt"><input type="text" id="pmt_<{$obj.obj_id}>" aid="<{$obj.obj_id}>" vtype="unsigned" atype="pmt_price" oninput="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)" value="<{$obj.pmt_price|default:0}>" class="pko_pmt_price" name="pko[obj_pmt_price][<{$obj.obj_id}>]" size="6" <{if $obj.delete == 'true'}>disabled="true"<{elseif $obj.make_nums > 0 || (!empty($obj.oid) && $obj.oid != '-1')}>readonly="readonly" style="color:#666;"<{else}>onchange="changetotalpko(this);total();"<{/if}> /></td>
<td class="obj_total"><input type="text" class="pkototal" style="display:none" id="pkototal_<{$obj.obj_id}>" size="2" value="0" <{if $obj.delete == 'true'}>disabled="true"<{/if}> /><input type="text" size="5" id="pkosalepr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> pkosaleprice<{/if}>" value="<{$obj.sale_price}>">
<input type="hidden" size="5" id="pkopmtpr_<{$obj.obj_id}>" readonly="readonly" <{if $obj.delete == 'true'}>disabled="true"<{/if}> class="none_input<{if $obj.obj_type != 'gift' && $obj.order_items|@count == '1'}> pkopmtprice<{/if}>" value="<{$obj.pmt_order_price}>">
<input type="hidden" id="pkopartmjz_<{$obj.obj_id}>" value="<{$obj.part_mjz_discount|default:0}>" />
<input type="hidden" id="pkodivideorderfee_<{$obj.obj_id}>" value="<{$obj.divide_order_fee|default:0}>" />
</td>
<td class="item_op" objid="<{$obj.obj_id}>">
<{if empty($obj.make_nums)}>
@@ -172,6 +178,42 @@ function edit_checked(obj_id,$obj_bn){
function changetotalpko(e){
var id = e.get('aid'),l=0,_ca = e.getNext('.error');
if(e.disable) return;
// 检查是否有oid限制
var tr = e.getParent('tr');
var hasOidLimit = tr && tr.get('data-oid') && tr.get('data-oid') != '-1';
var originalQuantity = null;
var originalSalePrice = null;
var originalDivideOrderFee = null;
var originalPmtPrice = null;
if(hasOidLimit) {
var numInput = $('num_'+id);
if(numInput && numInput.get('data-original-quantity')) {
originalQuantity = parseFloat(numInput.get('data-original-quantity'));
}
if($('pkosalepr_'+id)) {
originalSalePrice = parseFloat($('pkosalepr_'+id).get('data-original-sale-price') || $('pkosalepr_'+id).value);
if(!$('pkosalepr_'+id).get('data-original-sale-price')) {
$('pkosalepr_'+id).set('data-original-sale-price', originalSalePrice);
}
}
if($('pkopmtpr_'+id)) {
var pmtOrderPrice = parseFloat($('pkopmtpr_'+id).value || 0);
// 直接读取obj层的divide_order_fee
if($('pkodivideorderfee_'+id)) {
originalDivideOrderFee = parseFloat($('pkodivideorderfee_'+id).value || 0);
}
}
// 获取原始的商品优惠价格
if($('pmt_'+id)) {
originalPmtPrice = parseFloat($('pmt_'+id).get('data-original-pmt-price') || $('pmt_'+id).value || 0);
if(!$('pmt_'+id).get('data-original-pmt-price')) {
$('pmt_'+id).set('data-original-pmt-price', originalPmtPrice);
}
}
}
if (/^\d+(\.\d+)?$/.test(e.value)){
if(e.get('atype') == 'num'){
if (parseInt(e.value) <= 0){
@@ -180,7 +222,44 @@ function changetotalpko(e){
e.set('value', '0');
}
return;
}else{
}
// oid限制验证数量只能改小
if(hasOidLimit && originalQuantity !== null) {
var newQuantity = parseFloat(e.value);
if(newQuantity > originalQuantity) {
if (!_ca){
new Element('span',{'class':'error caution notice-inline',html:'数量不能大于原数量 '+originalQuantity}).injectAfter(e);
}
e.set('value', originalQuantity);
return;
} else {
if (_ca) _ca.remove();
}
// 按比例计算销售价和实付
if(originalSalePrice !== null && originalQuantity > 0) {
var ratio = newQuantity / originalQuantity;
var newSalePrice = (originalSalePrice * ratio).toFixed(2);
$('pkosalepr_'+id).set('value', newSalePrice);
if(originalDivideOrderFee !== null) {
var newDivideOrderFee = (originalDivideOrderFee * ratio).toFixed(2);
// newPmtPrice 按比例计算,和 newSalePrice 一样的计算方式
var newPmtPrice = (originalPmtPrice * ratio).toFixed(2);
$('pmt_'+id).set('value', newPmtPrice);
// 计算并更新part_mjz_discount = sale_price - divide_order_fee
var newPartMjzDiscount = (parseFloat(newSalePrice) - parseFloat(newDivideOrderFee)).toFixed(2);
if ($('pkopartmjz_'+id)) {
$('pkopartmjz_'+id).set('value', newPartMjzDiscount);
}
}
$('pkototal_'+id).value = (parseFloat($('num_'+id).value) * parseFloat($('pr_'+id).value)).toFixed(3);
return;
}
} else {
if (_ca) _ca.remove();
}
@@ -219,6 +298,15 @@ function changetotalpko(e){
}
}else if (e.get('atype') == 'price'){
// oid限制单价不可修改
if(hasOidLimit) {
var originalPrice = parseFloat($('pr_'+id).get('data-original-price') || $('pr_'+id).value);
if(!$('pr_'+id).get('data-original-price')) {
$('pr_'+id).set('data-original-price', originalPrice);
}
e.set('value', originalPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
@@ -267,6 +355,15 @@ function changetotalpko(e){
$('pkototal_'+oid).value = parseFloat(pkototalsub).toFixed(3);
}
}else if (e.get('atype') == 'pmt_price'){
// oid限制优惠价格不可修改
if(hasOidLimit) {
var originalPmtPrice = parseFloat($('pmt_'+id).get('data-original-pmt-price') || $('pmt_'+id).value);
if(!$('pmt_'+id).get('data-original-pmt-price')) {
$('pmt_'+id).set('data-original-pmt-price', originalPmtPrice);
}
e.set('value', originalPmtPrice);
return;
}
if (parseInt(e.value) < 0){
if (!_ca){
@@ -341,6 +438,40 @@ $('pko_list').getElements("input[atype]").each(function(e){
changetotalpko(e);
});
// 初始化oid限制的原始值
$('pko_list').getElements('tr[data-oid]').each(function(tr){
var oid = tr.get('data-oid');
if(oid && oid != '-1') {
var aid = tr.get('aid');
var numInput = $('num_'+aid);
var priceInput = $('pr_'+aid);
var pmtInput = $('pmt_'+aid);
var salePriceInput = $('pkosalepr_'+aid);
if(numInput && !numInput.get('data-original-quantity')) {
numInput.set('data-original-quantity', numInput.value);
}
if(priceInput && !priceInput.get('data-original-price')) {
priceInput.set('data-original-price', priceInput.value);
}
if(pmtInput && !pmtInput.get('data-original-pmt-price')) {
pmtInput.set('data-original-pmt-price', pmtInput.value || 0);
}
if(salePriceInput && !salePriceInput.get('data-original-sale-price')) {
salePriceInput.set('data-original-sale-price', salePriceInput.value);
}
if($('pkopmtpr_'+aid) && !$('pkopmtpr_'+aid).get('data-original-divide-order-fee')) {
var pmtOrderPrice = parseFloat($('pkopmtpr_'+aid).value || 0);
var originalSalePrice = parseFloat(salePriceInput.value || 0);
// 直接读取obj层的divide_order_fee
var originalDivideOrderFee = 0;
if($('pkodivideorderfee_'+aid)) {
originalDivideOrderFee = parseFloat($('pkodivideorderfee_'+aid).value || 0);
}
}
}
});
function total_pko(){
var total = 0,amount = 0;
$('pko_list').getElements("input.pkototal").each(function(item,k){