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

@@ -0,0 +1,95 @@
<form id="saveForm" action="index.php?app=ticket&ctl=admin_workflow_case&act=do_audit" method="post">
<input type="hidden" name="id" value="<{$data.id}>">
<div class="tableform">
<div class="division">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<th valign="middle" style="height:35px; line-height:35px;"><{t}>审批节点:<{/t}></th>
<td valign="middle" style="height:35px; line-height:35px; font-weight: bold; color: red;"><{$currentNode.node_name}></td>
</tr>
<tr>
<th valign="middle" style="height:35px; line-height:35px;"><{t}>来源单号:<{/t}></th>
<td valign="middle">
<input autocomplete="off" class="x-input " type="text" name="original_bn" value="<{$data.original_bn}>" id="class_bn" readonly="readonly" style="border:0px;">
</td>
</tr>
<tr>
<th height="35"><{t}>审批状态:<{/t}></th>
<td style="vertical-align:middle;">
<input type="radio" name="status" value="approved" <{if $data.status == 'approve'}>checked="checked"<{/if}> />
<label for="type1">同意</label>
<input type="radio" name="status" value="rejected" <{if $data.status == 'rejected'}>checked="checked"<{/if}> />
<label for="type2">拒绝</label>
</td>
</tr>
<tr>
<th height="35"><{t}>审批意见:<{/t}></th>
<td>
<textarea name="remark" id="remark" rows="12" vtype="required" style="width:400px !important; height:65px;"><{$data.remark}></textarea>
</td>
</tr>
<tr>
<th><{t}>赠品明细:<{/t}></th>
<td>
<div class="clear division">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="gridlist">
<thead>
<tr>
<th style="width:230px; height:26px;">赠品编码</th>
<th style="width:330px;">赠品名称</th>
<th style="width:120px;">申请数量</th>
</tr>
</thead>
<tbody>
<{foreach from=$addGiftList item=item}>
<tr>
<td style="width:230px; height:30px;"><{$item.bn}></td>
<td><input autocomplete="off" class="x-input " type="text" name="gift_bns[]" value="<{$item.name}>" readonly="readonly" style="border:0px; width:300px;"></td>
<td><{$item.quantity}></td>
</tr>
<{/foreach}>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>&nbsp;</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>&nbsp;</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>&nbsp;</td>
</tr>
</table>
</div>
<div class="table-action">
<{button type="submit" id="btn-save" label="审 批"}>
<{button type='button' label='关 闭' isCloseDialogBtn="true"}>
</div>
</div>
</form>
<script>
$('saveForm').store('target',{
onRequest:function(){
$('btn-save').set('disabled', 'true');
},
onComplete:function(jsontext){
var json = Json.evaluate(jsontext);
if (typeof(json.error) != 'undefined'){
$('btn-save').set('disabled', '');
}else{
$('btn-save').set('disabled', 'true');
if($('saveForm').getParent('.dialog')){
$('saveForm').getParent('.dialog').retrieve('instance').close();
}
}
}
});
</script>

View File

@@ -0,0 +1,113 @@
<{capture name="header"}>
<link href="../app/ome/statics/ome.css" rel="stylesheet" type="text/css">
<{/capture}>
<div class="tableform" id="caseinfo">
<h4>基本信息</h4>
<div class="division">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>审批号:</th>
<td><{$data.case_bn}></td>
<th>审批标题:</th>
<td><{$data.title}></td>
<th>创建时间:</th>
<td><{$data.at_time}></td>
</tr>
<tr>
<th>来源ID</th>
<td><{$data.original_id}></td>
<th>来源单号:</th>
<td><{$data.original_bn}></td>
<th>更新时间:</th>
<td><{$data.up_time}></td>
</tr>
<tr>
<th>订单号:</th>
<td><{$data.original_bn}></td>
<th>业务单号:</th>
<td><{$data.bill_bn}></td>
<th>业务类型:</th>
<td><{$data.bill_type}></td>
</tr>
<tr>
<th>审批场景类型:</th>
<td>
<{if $data.scene_type == 'add_gift'}>加赠<{/if}>
</td>
<th>审核状态:</th>
<td>
<{if $data.status == 'pending'}>待审批<{/if}>
<{if $data.status == 'processing'}>审批中<{/if}>
<{if $data.status == 'approved'}>同意<{/if}>
<{if $data.status == 'rejected'}>拒绝<{/if}>
<{if $data.status == 'cancelled'}>取消<{/if}>
</td>
<th>流程模板ID</th>
<td><{$data.template_id}></td>
</tr>
<tr>
<th>提交人ID</th>
<td><{$data.submitter_id}></td>
<th>提交人姓名:</th>
<td><{$data.submitter_name}></td>
<th>当前节点ID</th>
<td><{$data.current_node_id}></td>
</tr>
<tr>
<th>开始时间:</th>
<td><{$data.start_time}></td>
<th>结束时间:</th>
<td><{$data.end_time}></td>
<th>审批人类型:</th>
<td>
<{if $data.assignee_type == 'user'}>用户<{/if}>
<{if $data.assignee_type == 'role'}>角色<{/if}>
<{if $data.assignee_type == 'dept'}>部门<{/if}>
</td>
</tr>
<tr>
<th>审批人ID</th>
<td><{$data.assignee_id}></td>
<th>审批人姓名:</th>
<td><{$data.assignee_name}></td>
<th></th>
<td></td>
</tr>
</table>
</div>
<{if $data.items_context}>
<h4>订单赠品明细列表</h4>
<div class="goods-spec-cell" id='goods-spec-product'>
<{if $data.items_list && is_array($data.items_list) && count($data.items_list) > 0}>
<table class="gridlist">
<thead>
<tr>
<th style="text-align: left; font-weight: bold;">商品名称</th>
<th style="text-align: left;; font-weight: bold;">商品编码</th>
<th style="text-align: left;; font-weight: bold;">规格</th>
<th style="text-align: left;; font-weight: bold;">数量</th>
<th style="text-align: left;; font-weight: bold;">单价</th>
<th style="text-align: left;; font-weight: bold;">小计</th>
</tr>
</thead>
<tbody>
<{foreach from=$data.items_list item=item}>
<tr>
<td><{$item.name|default:'-'}></td>
<td><{$item.bn|default:'-'}></td>
<td><{$item.spec_info|default:'-'}></td>
<td><{$item.quantity|default:'0'}></td>
<td><{$item.price|default:'0.00'}></td>
<td><{$item.amount|default:'0.00'}></td>
</tr>
<{/foreach}>
</tbody>
</table>
<{else}>
<p class="text-muted">暂无商品明细数据</p>
<{/if}>
</div>
<{/if}>
</div>

View File

@@ -0,0 +1,167 @@
<{capture name="header"}>
<{css app="ome" src="ome.css"}>
<{css app="ome" src="style.css"}>
<{script src="coms/modedialog.js" app="desktop"}>
<{script src="coms/autocompleter.js" app="desktop"}>
<{/capture}>
<div class="form-layout">
<form method="post" id="submit_form" action="index.php?app=ticket&ctl=admin_workflow_node&act=save">
<input type="hidden" id="id" name="id" value="<{$data.id}>" />
<div class="form-layout-block">
<h3>审批流节点</h3>
<div class="form-layout-fields form-layout-fields-column">
<div class="form-field">
<span class="form-field-label">所属模板:</span>
<select id="template_id" name="template_id" class="form-select" vtype="required">
<option value="">请选择所属模板</option>
<{foreach from=$templateList item=item}>
<option value="<{$item.id}>" <{if $item.id == $data.template_id}>selected<{/if}> ><{$item.template_name}></option>
<{/foreach}>
</select>
<span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">节点名称:</span>
<input id="node_name" name="node_name" type="text" class="form-input" size="50" maxlength="100" placeholder="请输入节点名称" vtype="required" value="<{$data.node_name}>" /><span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">节点类型:</span>
<select id="node_type" name="node_type" class="form-select" vtype="required">
<option value="">请选择节点类型</option>
<{foreach from=$noteTypeList key=note_type item=note_name}>
<option value="<{$note_type}>" <{if $note_type == $data.node_type}>selected<{/if}> ><{$note_name}></option>
<{/foreach}>
</select><span style="color:red;">*</span>
</div>
<div class="form-field" style="display: none;">
<span class="form-field-label">节点顺序:</span>
<input id="step_order" name="step_order" type="number" class="form-input" size="10" placeholder="请输入节点顺序" vtype="required" value="<{$data.step_order}>" /><span style="color:red;">*</span>
</div>
<div class="form-field assignee-field" id="assignee_type_field">
<span class="form-field-label">审批人类型:</span>
<select id="assignee_type" name="assignee_type" class="form-select" vtype="required">
<option value="">请选择审批人类型</option>
<{foreach from=$assigneeTypeList key=assignee_type item=assignee_name}>
<option value="<{$assignee_type}>" <{if $assignee_type == $data.assignee_type}>selected<{/if}> ><{$assignee_name}></option>
<{/foreach}>
</select>
</div>
<div class="form-field assignee-field" id="assignee_name_field">
<span class="form-field-label">审批人:</span>
<select id="assignee_id" name="assignee_id" class="form-select" vtype="required">
<option value="">请选择审批人</option>
<{foreach from=$userList item=item}>
<option value="<{$item.user_id}>" <{if $item.user_id == $data.assignee_id}>selected<{/if}> ><{$item.name}></option>
<{/foreach}>
</select>
</div>
</div>
</div>
<div class="table-action">
<{button type="button" id="save_button" label="保 存"}> &nbsp;
<{button type="button" class="btn-secondary" id="return-btn" label="返 回" onclick="location.href=window.frameElement.src;"}>
</div>
</form>
</div>
<script>
//setting
var node_id = '<{$data.id}>';
// 切换审批人字段显示
function toggleAssigneeFields() {
var nodeType = $('node_type').value;
var assigneeFields = document.querySelectorAll('.assignee-field');
if(nodeType == 'approval') {
assigneeFields.forEach(function(field) {
field.style.display = 'block';
});
} else {
assigneeFields.forEach(function(field) {
field.style.display = 'none';
});
}
}
// 页面加载时初始化
window.addEvent('domready', function() {
//toggleAssigneeFields();
$('save_button').addEvent('click',function(e)
{
var _this = this;
var form = this.getParent('form');
var template_id = $('template_id').value.trim();
var node_name = $('node_name').value.trim();
var node_type = $('node_type').value.trim();
//var step_order = $('step_order').value.trim();
var assignee_type = $('assignee_type').value.trim();
var assignee_id = $('assignee_id').value.trim();
if(!template_id){
MessageBox.error('请选择所属模板');
e.stop();
return false;
}
if(!node_name){
MessageBox.error('请填写节点名称');
e.stop();
return false;
}
if(!node_type){
MessageBox.error('请选择节点类型');
e.stop();
return false;
}
/***
if(!step_order){
MessageBox.error('请填写节点顺序');
e.stop();
return false;
}
***/
if(!assignee_type){
MessageBox.error('请选择审批人类型');
e.stop();
return false;
}
if(!assignee_id){
MessageBox.error('请填写审批人ID');
e.stop();
return false;
}
form.store('target',{
onRequest:function(){
_this.disabled=true;
},
onComplete:function(jsontext){
try{
var json = JSON.decode(jsontext);
if (typeof(json.error)!='undefined'){
_this.disabled=false;
}else{
_this.disabled=true;
if(opener.finderGroup['<{$env.get.finder_id}>']) opener.finderGroup['<{$env.get.finder_id}>'].refresh.delay(100,opener.finderGroup['<{$env.get.finder_id}>']);
setTimeout('window.close()',200);
}
}catch(e){}
}
});
form.fireEvent('submit',e);
});
});
</script>

View File

@@ -0,0 +1,45 @@
<{capture name="header"}>
<link href="../app/ome/statics/ome.css" rel="stylesheet" type="text/css">
<{/capture}>
<div class="tableform" id="nodeinfo">
<h4>基本信息</h4>
<div class="division">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>所属模板ID</th>
<td><{$data.template_id}></td>
<th>节点名称:</th>
<td><{$data.node_name}></td>
<th>创建时间:</th>
<td><{$data.at_time}></td>
</tr>
<tr>
<th>节点类型:</th>
<td>
<{if $data.node_type == 'start'}>开始<{/if}>
<{if $data.node_type == 'approval'}>审批<{/if}>
<{if $data.node_type == 'end'}>结束<{/if}>
</td>
<th>节点顺序:</th>
<td><{$data.step_order}></td>
<th>更新时间:</th>
<td><{$data.up_time}></td>
</tr>
<{if $data.node_type == 'approval'}>
<tr>
<th>审批人类型:</th>
<td>
<{if $data.assignee_type == 'user'}>用户<{/if}>
<{if $data.assignee_type == 'role'}>角色<{/if}>
<{if $data.assignee_type == 'dept'}>部门<{/if}>
</td>
<th>审批人ID</th>
<td><{$data.assignee_id}></td>
<th>审批人姓名:</th>
<td><{$data.assignee_name}></td>
</tr>
<{/if}>
</table>
</div>
</div>

View File

@@ -0,0 +1,62 @@
<{capture name="header"}>
<link href="../app/ome/statics/ome.css" rel="stylesheet" type="text/css">
<{/capture}>
<div class="tableform" id="recordinfo">
<h4>基本信息</h4>
<div class="division">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>审批流案例ID</th>
<td><{$data.case_id}></td>
<th>节点ID</th>
<td><{$data.node_id}></td>
<th>创建时间:</th>
<td><{$data.at_time}></td>
</tr>
<tr>
<th>审批人类型:</th>
<td>
<{if $data.assignee_type == 'user'}>用户<{/if}>
<{if $data.assignee_type == 'role'}>角色<{/if}>
<{if $data.assignee_type == 'dept'}>部门<{/if}>
</td>
<th>审批人ID</th>
<td><{$data.assignee_id}></td>
<th>更新时间:</th>
<td><{$data.up_time}></td>
</tr>
<tr>
<th>审批人姓名:</th>
<td><{$data.assignee_name}></td>
<th>操作类型:</th>
<td>
<{if $data.action == 'approved'}>同意<{/if}>
<{if $data.action == 'rejected'}>拒绝<{/if}>
<{if $data.action == 'forward'}>转发<{/if}>
</td>
<th>状态:</th>
<td>
<{if $data.status == 'pending'}>待审批<{/if}>
<{if $data.status == 'approved'}>同意<{/if}>
<{if $data.status == 'rejected'}>拒绝<{/if}>
</td>
</tr>
<tr>
<th>处理时间:</th>
<td><{$data.process_time}></td>
<th></th>
<td></td>
<th></th>
<td></td>
</tr>
</table>
</div>
<{if $data.remark}>
<h4>审批意见</h4>
<div class="division">
<pre><{$data.remark}></pre>
</div>
<{/if}>
</div>

View File

@@ -0,0 +1,121 @@
<{capture name="header"}>
<{css app="ome" src="ome.css"}>
<{css app="ome" src="style.css"}>
<{script src="coms/modedialog.js" app="desktop"}>
<{script src="coms/autocompleter.js" app="desktop"}>
<{/capture}>
<div class="form-layout">
<form method="post" id="submit_form" action="index.php?app=ticket&ctl=admin_workflow_template&act=save">
<input type="hidden" id="id" name="id" value="<{$data.id}>" />
<div class="form-layout-block">
<h3>审批流模板</h3>
<div class="form-layout-fields form-layout-fields-column">
<{if $data.id}>
<div class="form-field">
<span class="form-field-label">模板编号:</span>
<span><input type="hidden" id="template_bn" name="template_bn" value="<{$data.template_bn}>" /><{$data.template_bn}></span>
</div>
<{else}>
<div class="form-field">
<span class="form-field-label">模板编号:</span>
<input id="template_bn" name="template_bn" type="text" class="form-input" onkeyup="value=value.replace(/[^A-Za-z0-9_#\/-]/ig,'')" size="30" maxlength="30" placeholder="请输入模板编号" value="<{$data.template_bn}>" vtype="required" /><span style="color:red;">*</span>
</div>
<{/if}>
<div class="form-field">
<span class="form-field-label">模板名称:</span>
<input id="template_name" name="template_name" type="text" class="form-input" size="50" maxlength="100" placeholder="请输入模板名称" vtype="required" value="<{$data.template_name}>" /><span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">审批场景类型:</span>
<select id="scene_type" name="scene_type" class="form-select" vtype="required">
<option value="">请选审批场景类型</option>
<option value="add_gift" <{if $data.scene_type == 'add_gift'}>selected<{/if}>>加赠</option>
</select><span style="color:red;">*</span>
</div>
<div class="form-field">
<span class="form-field-label">审批流程描述:</span>
<textarea id="description" name="description" class="form-textarea" rows="10" cols="80" placeholder="请输入审批流配置JSON格式" vtype="required" style="width: 550px; height: 200px;"><{$data.description}></textarea>
</div>
<div class="form-field">
<span class="form-field-label">是否开启:</span>
<select id="is_enabled" name="is_enabled" class="form-select">
<option value="true" <{if $data.is_enabled != 'false'}>selected<{/if}>>启用</option>
<option value="false" <{if $data.is_enabled == 'false'}>selected<{/if}>>禁用</option>
</select>
</div>
</div>
</div>
<div class="table-action">
<{button type="button" id="save_button" label="保 存"}> &nbsp;
<{button type="button" class="btn-secondary" id="return-btn" label="返 回" onclick="location.href=window.frameElement.src;"}>
</div>
</form>
</div>
<script>
//setting
var template_id = '<{$data.id}>';
(function(){
window.addEvent('domready', function() {
$('save_button').addEvent('click',function(e)
{
var _this = this;
var form = this.getParent('form');
var template_bn = $('template_bn').value.trim();
var template_name = $('template_name').value.trim();
var scene_type = $('scene_type').value.trim();
var description = $('description').value.trim();
if(!template_bn){
MessageBox.error('请填写模板编号');
e.stop();
return false;
}
if(!template_name){
MessageBox.error('请填写模板名称');
e.stop();
return false;
}
if(!scene_type){
MessageBox.error('请选择审批场景类型');
e.stop();
return false;
}
if(!description){
MessageBox.error('请填写审批流程描述');
e.stop();
return false;
}
form.store('target',{
onRequest:function(){
_this.disabled=true;
},
onComplete:function(jsontext){
try{
var json = JSON.decode(jsontext);
if (typeof(json.error)!='undefined'){
_this.disabled=false;
}else{
_this.disabled=true;
if(opener.finderGroup['<{$env.get.finder_id}>']) opener.finderGroup['<{$env.get.finder_id}>'].refresh.delay(100,opener.finderGroup['<{$env.get.finder_id}>']);
setTimeout('window.close()',200);
}
}catch(e){}
}
});
form.fireEvent('submit',e);
});
});
})();
</script>

View File

@@ -0,0 +1,37 @@
<{capture name="header"}>
<link href="../app/ome/statics/ome.css" rel="stylesheet" type="text/css">
<{/capture}>
<div class="tableform" id="templateinfo">
<h4>基本信息</h4>
<div class="division">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>模板编号:</th>
<td><{$data.template_bn}></td>
<th>模板名称:</th>
<td><{$data.template_name}></td>
<th>创建时间:</th>
<td><{$data.at_time}></td>
</tr>
<tr>
<th>场景类型:</th>
<td><{$data.scene_type_name}></td>
<th>开启审核流程:</th>
<td>
<{if $data.is_enabled != 'false'}>启用<{/if}>
<{if $data.is_enabled == 'false'}>禁用<{/if}>
</td>
<th>更新时间:</th>
<td><{$data.up_time}></td>
</tr>
</table>
</div>
<{if $data.description}>
<h4>审批流程描述</h4>
<div class="division">
<pre><{$data.description}></pre>
</div>
<{/if}>
</div>