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

@@ -71,7 +71,7 @@
<div class="form-layout-fields">
<div class="form-field">
<span class="form-field-label"><span style="color:red;">*</span>物料编号:</span>
<input class="form-input" placeholder="请输入物料编号" type="text" name="material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/]/ig,'')" />
<input class="form-input" placeholder="请输入物料编号" type="text" name="material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/ ]/ig,'')" />
</div>
<div class="form-field">
<span class="form-field-label"><span style="color:red;">*</span>物料条码:</span>
@@ -135,6 +135,16 @@
</div>
<span style="color:red;">*支持门店销售,需要开启此配置项。</span>
</div>
<div class="form-field">
<span class="form-field-label">是否管控库存:</span>
<div class="form-radios">
<input id="is_ctrl_store01" name="is_ctrl_store" type="radio" checked="checked" value="1">
<label for="is_ctrl_store01"></label>
<input id="is_ctrl_store02" name="is_ctrl_store" type="radio" value="2">
<label for="is_ctrl_store02" ></label>
</div>
<span style="color:red;">*审核订单时,是否需要管控库存。</span>
</div>
<div class="form-layout-fields">
<div id="description" style="border: 0px solid black;width: 500px;padding: 10px 50px;letter-spacing: 1px;display: none;background-color: #FDFDDB;">
扫码中识别整个条码中第

View File

@@ -154,6 +154,18 @@
</div>
<span style="color:red;">*支持门店配送/自提,需要开启此配置项。</span>
</div>
<div class="form-field">
<span class="form-field-label">是否管控库存:</span>
<div class="form-radios">
<input id="is_ctrl_store01" name="is_ctrl_store" type="radio" <{if $material_info.is_ctrl_store != 2}>checked="checked"<{/if}> value="1">
<label for="is_ctrl_store01"></label>
<input id="is_ctrl_store02" name="is_ctrl_store" type="radio" <{if $material_info.is_ctrl_store == 2}>checked="checked"<{/if}> value="2">
<label for="is_ctrl_store02" ></label>
</div>
<span style="color:red;">*审核订单时,是否需要管控库存。</span>
</div>
<div class="form-field">
<span class="form-field-label">所属公司业务组织:</span>
<select class="form-input" placeholder="请选择" name="bbu_info">

View File

@@ -97,7 +97,7 @@
<{if $readonly.type == 1}>
<{$material_info.material_bn}><input type="hidden" name="material_bn" value="<{$material_info.material_bn}>" >
<{else}>
<input class="form-input" placeholder="请输入物料编号" type="text" name="material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/]/ig,'')" value="<{$material_info.material_bn}>" />
<input class="form-input" placeholder="请输入物料编号" type="text" name="material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/ ]/ig,'')" value="<{$material_info.material_bn}>" />
<{/if}>
</div>
<div class="form-field">
@@ -165,6 +165,18 @@
</div>
<span style="color:red;">*支持门店销售,需要开启此配置项。</span>
</div>
<div class="form-field">
<span class="form-field-label">是否管控库存:</span>
<div class="form-radios">
<input id="is_ctrl_store01" name="is_ctrl_store" type="radio" <{if $material_info.is_ctrl_store != 2}>checked="checked"<{/if}> value="1">
<label for="is_ctrl_store01"></label>
<input id="is_ctrl_store02" name="is_ctrl_store" type="radio" <{if $material_info.is_ctrl_store == 2}>checked="checked"<{/if}> value="2">
<label for="is_ctrl_store02" ></label>
</div>
<span style="color:red;">*审核订单时,是否需要管控库存。</span>
</div>
<div class="form-field">
<span class="form-field-label">所属公司业务组织:</span>
<select class="form-input" placeholder="请选择" name="bbu_info">
@@ -437,14 +449,17 @@
window.addEvent('domready', function() {
$ES('input[name=type]').each(function(item){
item.addEvent('click',function(e){
if(this.value == '1'){
if(this.value == '1' || this.value == '4'){
$('combination_items').setStyle('display','block');
}else{
$('combination_items').setStyle('display','none');
}
});
if((item.checked || item.getProperty('type') == 'hidden') && item.getValue() == 2){
// 初始化:成品(1)和礼盒(4)显示关联半成品/普通物料信息,其他类型隐藏
if((item.checked || item.getProperty('type') == 'hidden') && (item.getValue() == '1' || item.getValue() == '4')){
$('combination_items').setStyle('display','block');
}else if(item.checked || item.getProperty('type') == 'hidden'){
$('combination_items').setStyle('display','none');
}
});
@@ -498,7 +513,7 @@
+'</tr>';
$('material-find-btn').addEvent('click',function(e){
var material_type = "<{$material_info.type}>";
var material_type = $$('input[name=type]:checked').get('value');
var type = 2;
if (material_type == 4){
type ='giftpackage';

View File

@@ -25,7 +25,7 @@
<{/if}>
</th>
<td>
<input autocomplete="off" type="text" value="<{$cat.cat_name}>" name="cat[cat_name]" maxlength="20" vtype='required' class='x-input'/>
<input autocomplete="off" type="text" value="<{$cat.cat_name}>" name="cat[cat_name]" maxlength="30" vtype='required' class='x-input'/>
<!--
<input autocomplete="off" type="text" value="<{$cat.cat_name|escape:'html'}>" name="cat[cat_name]" vtype='required' class='x-input'/>
-->

View File

@@ -43,7 +43,7 @@
</div>
<div class="form-field">
<span class="form-field-label">销售物料编码:</span>
<input class="form-input" placeholder="请输入物料编码" type="text" name="sales_material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/]/ig,'')" /><span style="color:red;">*</span>
<input class="form-input" placeholder="请输入物料编码" type="text" name="sales_material_bn" vtype="required" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/ ]/ig,'')" /><span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">物料类型:</span>
@@ -118,9 +118,10 @@
<table class="gridlist" id="material_table" style="margin:4px 0;">
<thead>
<tr>
<th>编码</th>
<th>编码</th>
<th style="width:240px;">名称</th>
<th><{$price_label}></th>
<th>固定价</th>
<th>数量</th>
<th>组合价格贡献占比(1-100数值)</th>
<th style="width:30px;">删除</th>
@@ -128,7 +129,7 @@
</thead>
<tbody id="dataNode">
<tr>
<td colspan="6" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>
<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无组合关联的基础物料信息 </div></td>
</tr>
</tbody>
</table>
@@ -345,6 +346,7 @@ var priceLabel = '<{$price_label|default:"零售价"}>';
//组合
var tpl='<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{' + (priceField || 'retail_price') + '}</td>'
+' <td>{fixed_price}</td>'
+' <td><input type="text" value="{num}" key="num" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6"></td>'
+' <td><input type="text" vtype="number&amp;&amp;required" tname="pr[_PRIMARY_]" key="rate" value="{rate}" id="rate_{bm_id}" size="5"></td>'
+' <td><{img src="bundle/delecate.gif" app="desktop" key="state" class="pointer btn-delete-item"}></td>'
@@ -436,7 +438,7 @@ var priceLabel = '<{$price_label|default:"零售价"}>';
var pag,rows,giftPag;
function emptyData(){
var noData='<tr>'
+'<td colspan="8" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>'
+'<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无组合关联的基础物料信息... </div></td>'
+'</tr>';
$('dataNode').set('html',noData);
}

View File

@@ -146,6 +146,7 @@
<th>编码</th>
<th style="width:240px;">名称</th>
<th><{$price_label|default:"零售价"}></th>
<th>固定价</th>
<th>数量</th>
<th id="ratio_column">组合价格贡献占比(1-100数值)</th>
<th id="row_delete_button" style="width:30px;">删除</th>
@@ -153,7 +154,7 @@
</thead>
<tbody id="dataNode">
<tr>
<td colspan="6" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>
<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>
</tr>
</tbody>
</table>
@@ -536,6 +537,7 @@ var sm_id = "<{$material_info.sm_id}>";
if($('cantdel')){
var tpl='<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{display_price}</td>'
+' <td>{fixed_price}</td>'
+' <td><input type="text" value="{number}" key="number" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6" readonly></td>'
+' <td><input type="text" readonly="readonly" vtype="number&amp;&amp;required" tname="pr[_PRIMARY_]" key="rate" value="{rate}" id="rate_{bm_id}" size="5"></td>'
+' <td style="text-align:center;">-<{img src="bundle/delecate.gif" style="display:none;" app="desktop" key="state" class="pointer btn-delete-item"}></td>'
@@ -544,11 +546,13 @@ var sm_id = "<{$material_info.sm_id}>";
if (chose_type == 3) {
var tpl = '<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+ ' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{display_price}</td>'
+' <td>{fixed_price}</td>'
+ ' <td><input type="text" readonly="readonly" value="{number}" key="number" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6"></td>'
+ '</tr>';
}else{
var tpl = '<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+ ' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{display_price}</td>'
+' <td>{fixed_price}</td>'
+ ' <td><input type="text" value="{number}" key="number" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6"></td>'
+ ' <td><input type="text" readonly="readonly" vtype="number&amp;&amp;required" tname="pr[_PRIMARY_]" key="rate" value="{rate}" id="rate_{bm_id}" size="5"></td>'
+ ' <td><{img src="bundle/delecate.gif" app="desktop" key="state" class="pointer btn-delete-item"}></td>'

View File

@@ -58,7 +58,7 @@
<div class="form-field">
<span class="form-field-label">销售物料编码:</span>
<{$material_info.sales_material_bn}>
<input class="form-input" placeholder="请输入物料编码" type="hidden" name="sales_material_bn" vtype="required" value="<{$material_info.sales_material_bn}>" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/]/ig,'')" /><span style="color:red;">*</span>
<input class="form-input" placeholder="请输入物料编码" type="hidden" name="sales_material_bn" vtype="required" value="<{$material_info.sales_material_bn}>" onkeyup="value=value.replace(/[^A-Za-z0-9_-\/ ]/ig,'')" /><span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">物料类型:</span>
@@ -157,9 +157,10 @@
<table class="gridlist" id="material_table" style="margin:4px 0;">
<thead>
<tr>
<th>编码</th>
<th>编码</th>
<th style="width:240px;">名称</th>
<th><{$price_label}></th>
<th>固定价</th>
<th>数量</th>
<th>组合价格贡献占比(1-100数值)</th>
<th style="width:30px;">删除</th>
@@ -167,7 +168,7 @@
</thead>
<tbody id="dataNode">
<tr>
<td colspan="6" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>
<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无关联的基础物料信息 </div></td>
</tr>
</tbody>
</table>
@@ -618,6 +619,7 @@ var sm_id = "<{$material_info.sm_id}>";
if($('cantdel')){
var tpl='<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{' + (priceField || 'retail_price') + '}</td>'
+' <td>{fixed_price}</td>'
+' <td><input type="text" value="{number}" key="number" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6" readonly></td>'
+' <td><input type="text" vtype="number&amp;&amp;required" tname="pr[_PRIMARY_]" key="rate" value="{rate}" id="rate_{bm_id}" size="5"></td>'
+' <td style="text-align:center;">-<{img src="bundle/delecate.gif" style="display:none;" app="desktop" key="state" class="pointer btn-delete-item"}></td>'
@@ -632,6 +634,7 @@ var sm_id = "<{$material_info.sm_id}>";
}else{
var tpl='<tr key="{bm_id}" id="bm_{bm_id}" title="点击选取/反选此条记录">'
+' <td>{material_bn}</td><td class="material-name">{material_name}</td><td>{' + (priceField || 'retail_price') + '}</td>'
+' <td>{fixed_price}</td>'
+' <td><input type="text" value="{number}" key="number" vtype="number&amp;&amp;required" tname="at[_PRIMARY_]" size="6"></td>'
+' <td><input type="text" vtype="number&amp;&amp;required" tname="pr[_PRIMARY_]" key="rate" value="{rate}" id="rate_{bm_id}" size="5"></td>'
+' <td><{img src="bundle/delecate.gif" app="desktop" key="state" class="pointer btn-delete-item"}></td>'
@@ -753,7 +756,7 @@ var sm_id = "<{$material_info.sm_id}>";
var pag,rows,giftPag;
function emptyData(){
var noData='<tr>'
+'<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无物料信息 </div></td>'
+'<td colspan="7" style="padding:0;"><div class="note" style="margin:0;"> 暂无关联的基础物料信息... </div></td>'
+'</tr>';
$('dataNode').set('html',noData);
}

View File

@@ -0,0 +1,73 @@
<div class="tableform">
<div class="division">
<form method="post" action="index.php?app=material&ctl=admin_seller&act=save" id="frm">
<{input type="hidden" name="id" value=$data.id}>
<table border="0" cellspacing="0" cellpadding="0" >
<tbody>
<tr>
<th>销售人员编码:</th>
<td><{input type="text" vtype="required" name="seller_code" value=$data.seller_code }></td>
</tr>
<tr>
<th>销售人员名称:</th>
<td><{input type="text" vtype="required" name="seller_name" value=$data.seller_name }></td>
</tr>
<tr>
<th>禁用状态:</th>
<td><{input type="bool" name="disabled" value=$data.disabled }></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<{if $readonly}><{else}>
<{area inject=".mainFoot"}>
<div class="table-action">
<table width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<{button type="button" id='submit_btn' class="btn-primary" label='保存' }>
<{button type="button" id='close_btn' class="btn-secondary" label='关闭' isCloseDialogBtn="true"}>
</td>
</tr>
</tbody>
</table>
</div>
<{/area}>
<script type="text/javascript">
(function(){
var _form = $('frm');//表单ID
var btn = $('submit_btn');//按钮ID
var finder = finderGroup['<{$env.get.finder_id}>'];
_form.store('target',{
onRequest:function(){
btn.setAttribute('disabled', 'disabled');
},
onComplete:function(){
btn.removeAttribute('disabled');
},
onSuccess:function(response){
var hash_res_obj = JSON.decode(response);
if (hash_res_obj.success != undefined && hash_res_obj.success != ""){
try{
var _dialogIns = btn.getParent('.dialog').retrieve('instance');
}catch(e){}
if(_dialogIns){
setTimeout(finder.refresh(),30000);
_dialogIns.close();
}
}
}
});
btn.addEvent('click',function(){
_form.fireEvent('submit',{stop:$empty});
});
})();
</script>
<{/if}>