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

@@ -108,4 +108,4 @@ window.addEvent('domready', function(){
<{button type="submit" label=$___desktop="导出"|t:'desktop' app="desktop" icon="btn_get_world.gif"}>
<{toinput from=$env.post}>
</div></div>
</form>
</form>

View File

@@ -13,19 +13,36 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<div style="margin:5px 0;">
<{foreach from=$temps item=item name="_s"}>
<input type="radio" name="extemp_id" class="extemp_id" vtype="requiredradio" value="<{$item.et_id}>" <{if $smarty.foreach._s.first}>checked="checked"<{/if}> /><label><{$item.et_name}></label>
<input type="radio" name="extemp_id" class="extemp_id" vtype="requiredradio" value="<{$item.et_id}>" <{if $smarty.foreach._s.first}>checked="checked"<{/if}> />
<label style="display:inline;margin-left:3px;"><{$item.et_name}></label>
<a href="javascript:void(0);" class="delete-temp-btn" data-et-id="<{$item.et_id}>" title="删除此模板" style="margin-left:5px;display:inline-block;"><{img src="bundle/delete.gif" app="desktop" class="pointer btn-delete-item"}></a>
<{/foreach}>
</div>
<div id="expmbdetail">
</div>
<script>
// 获取 type 参数
var exportType = '<{$type}>' || '<{$smarty.get.type}>';
if(!exportType){
// 如果模板变量中没有,尝试从 URL 中获取
var urlParams = window.location.search.substring(1).split('&');
for(var i = 0; i < urlParams.length; i++){
var param = urlParams[i].split('=');
if(param[0] == 'type'){
exportType = decodeURIComponent(param[1]);
break;
}
}
}
$ES('.extemp_id').each(function(e){
if(e.checked){
var extemp_id = e.value;
new Request.HTML({
update:'expmbdetail',
url:'index.php?index.php?app=desktop&ctl=export&act=getTempDetail&tp_id='+extemp_id,
url:'index.php?app=desktop&ctl=export&act=getTempDetail&tp_id='+extemp_id,
}).send();
}
@@ -33,8 +50,68 @@
var extemp_id = this.value;
new Request.HTML({
update:'expmbdetail',
url:'index.php?index.php?app=desktop&ctl=export&act=getTempDetail&tp_id='+extemp_id,
url:'index.php?app=desktop&ctl=export&act=getTempDetail&tp_id='+extemp_id,
}).send();
})
});
</script>
// 删除模板功能
if($ES('.delete-temp-btn')){
$ES('.delete-temp-btn').each(function(btn){
btn.addEvent('click', function(e){
e.stop();
if(!confirm('确定要删除该模板吗?')){
return;
}
var et_id = this.get('data-et-id');
var _this = this;
new Request({
url: 'index.php?app=desktop&ctl=export&act=deleteTemp',
method: 'post',
data: {
et_id: et_id
},
onComplete: function(response){
try{
var result = JSON.decode(response);
// 检查删除是否成功splash() 方法返回格式为 {success: "...", redirect: "...", splash: true}
if(result.success || result.splash === true || result.rsp == 'succ'){
// 删除成功,刷新模板列表
if(exportType){
var url = 'index.php?app=desktop&ctl=export&act=getTemps&type=' + exportType;
// 查找父容器 expmbnormal当前内容被加载到这个容器中
var parentContainer = $('expmbnormal');
if(parentContainer){
new Request.HTML({
update: parentContainer,
url: url,
onComplete: function(){
// 清空详情区域
if($('expmbdetail')){
$('expmbdetail').set('html', '');
}
}
}).send();
} else {
// 如果找不到父容器,刷新当前页面
location.reload();
}
} else {
location.reload();
}
} else {
// 失败情况:可能有 error 字段或 msg 字段
var errorMsg = result.error || result.msg || result.message || '删除失败';
alert(errorMsg);
}
} catch(e){
alert('删除失败:' + e.message);
}
}
}).send();
});
});
}
</script>

View File

@@ -41,20 +41,52 @@
</div>
</div>
<script>
$$('#finder-header-<{$name}> .col-select-opt').addEvents({
'click':function(e){
if(e.target.match('input'))return;
var menu = this.retrieve('dropmenu',this.getElement('.x-drop-menu'));
menu.setStyles({
top:(this.getPosition('workground').y+this.offsetHeight.toInt()),
left:this.getPosition('workground').x
});
menu.style.display= (menu.style.display=="block"?'none':'block');
},
'mouseleave':function(){
this.retrieve('dropmenu',this.getElement('.x-drop-menu')).hide();
(function(){
var trigger = $$('#finder-header-<{$name}> .col-select-opt')[0];
if(!trigger) return;
var menu = trigger.getElement('.x-drop-menu');
if(!menu) return;
trigger.store('dropmenu', menu);
// 显示时注入到 body避免被 finder-header-wrapper 的 overflow:hidden 裁剪
function showMenu(){
if(menu.getParent() !== document.body){
menu.inject(document.body);
}
var top, left;
if(trigger.getBoundingClientRect){
var rect = trigger.getBoundingClientRect();
top = (rect.bottom != null ? rect.bottom : rect.top + trigger.offsetHeight);
left = (rect.left != null ? rect.left : rect.x);
} else {
var scroll = window.getScroll();
var pos = trigger.getPosition();
top = pos.y + trigger.offsetHeight - scroll.y;
left = pos.x - scroll.x;
}
menu.setStyle('position', 'fixed');
menu.setStyles({ top: top + 'px', left: left + 'px', zIndex: 9999 });
menu.style.display = 'block';
}
});
function hideMenu(){ menu.style.display = 'none'; }
function bindDocClose(){
var docClick = function(e){
var t = e.target;
if(trigger.contains(t)) return;
hideMenu();
document.removeEvent('click', docClick);
};
setTimeout(function(){ document.addEvent('click', docClick); }, 0);
}
trigger.addEvent('click', function(e){
if(e.target && e.target.match && e.target.match('input')) return;
if(menu.style.display === 'block'){
hideMenu();
return;
}
showMenu();
bindDocClose();
});
})();
</script>
<{/if}>
</td>