mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-05 14:45:33 +08:00
412 lines
19 KiB
HTML
412 lines
19 KiB
HTML
<!--
|
|
Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<div class='division'>
|
|
<h3><{$title}></h3>
|
|
<form method='post' action='index.php?app=inventorydepth&ctl=regulation_apply&act=save' id='regulation-apply-form'>
|
|
<input type='hidden' name='init_bn' value="<{$data.bn|default:$init_bn}>">
|
|
<input type='hidden' name='id' value="<{$data.id|default:''}>">
|
|
<div class='tableform'>
|
|
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr>
|
|
<th><span class="red">*</span> 应用编号:</th>
|
|
<td><input type='text' name='bn' value="<{$data.bn|default:''}>" vtype='required' class='x-input' <{if $data.bn}>readonly='readonly'<{/if}> ></td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 应用名称:</th>
|
|
<td><{input type='text' name='heading' value=$data.heading vtype='required'}></td>
|
|
</tr>
|
|
<tr id='condition-tr'>
|
|
<th><span class="red">*</span> 规则类型:</th>
|
|
<td>
|
|
<{if $data.condition=='stock'}> 更新销售库存 <{elseif $data.condition=='frame'}> 更新商品上下架状态 <{/if}>
|
|
<input type='hidden' name='condition' value="<{$data.condition}>">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 触发类型:</th>
|
|
<td><{input type="select" required=true name="style" options=$options.style value=$data.style}></td>
|
|
</tr>
|
|
<tr id='apply-range'>
|
|
<th><span class="red">*</span> 应用范围:</th>
|
|
<td>
|
|
<{*
|
|
<input type='radio' name='rangetype' value='all' <{if $data.shop_id.0 == '_ALL_'}>checked<{/if}>>所有店铺
|
|
<input type='radio' name='rangetype' value='some' <{if $data.shop_id.0 != '_ALL_'}>checked<{/if}>>指定店铺
|
|
<input type='hidden' vtype='requiredcheckbox' />
|
|
*}>
|
|
<ul <{if $data.shop_id.0 == '_ALL_'}>style='display:none;'<{/if}> id='shops'>
|
|
<{foreach from=$data.shops item=shop}>
|
|
<li style='float:left;'><input type='checkbox' name='shop_id[]' value='<{$shop.shop_id}>' <{if in_array($shop.shop_id,$data.shop_id)}>checked<{/if}>><{$shop.name}></li>
|
|
<{/foreach}>
|
|
<div class='clear'></div>
|
|
</ul>
|
|
<{*
|
|
<{input type='object' object='shop@ome' multiple=true breakpoint='0' name='shop_id' value=$data.shop_id}>
|
|
*}>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 应用对象:</th>
|
|
<td>
|
|
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr class='choose' id='choose_frame' <{if $data.condition!='frame'}>style='display:none;'<{/if}>>
|
|
<td>
|
|
<div style='margin-bottom:5px;'><input type='checkbox' name='apply-goods-all' value='true' onclick="isAll(this);" <{if $data.apply_goods.id == '_ALL_'}>checked<{/if}> >全部商品</div>
|
|
<div style="display:inline-block;*zoom:1;" class="object-select clearfix ids">
|
|
<div rel="请选择商品集..." id="" class="label">请选择商品集...</div>
|
|
<div class="handle"> </div>
|
|
<input type="hidden" value="" vtype="" name="">
|
|
</div>
|
|
<div style="display:inline-block;*zoom:1;" class="object-select clearfix filters">
|
|
<div rel="请选择商品集条件..." id="" class="label">请选择商品集条件...</div>
|
|
<div class="handle"> </div>
|
|
</div>
|
|
<div class='gridlist rows-body'></div>
|
|
</td>
|
|
</tr>
|
|
<tr class='choose' id='choose_stock' <{if $data.condition!='stock'}>style='display:none;'<{/if}>>
|
|
<td>
|
|
<div style='margin-bottom:5px;'><input type='checkbox' name='apply-goods-all' value='true' onclick="isAll(this);" <{if $data.apply_goods.id == '_ALL_'}>checked<{/if}> >全部货品</div>
|
|
<div style="display:inline-block;*zoom:1;" class="object-select clearfix ids">
|
|
<div rel="请选择货品集..." id="" class="label">请选择货品集...</div>
|
|
<div class="handle"> </div>
|
|
<input type="hidden" value="" vtype="" name="">
|
|
</div>
|
|
<div style="display:inline-block;*zoom:1;" class="object-select clearfix filters">
|
|
<div rel="请选择货品集条件..." id="" class="label">请选择货品集条件...</div>
|
|
<div class="handle"> </div>
|
|
</div>
|
|
<div class='gridlist rows-body'></div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 应用规则:</th>
|
|
<td><{input type='object' object='regulation' multiple=false breakpoint='0' name='regulation_id' value=$data.regulation_id filter="using=true&condition={$data.condition}" }></td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 开始时间:</th>
|
|
<td><{input type='time' name='start_time' value=$data.start_time vtype='required'}></td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 结束时间:</th>
|
|
<td><{input type='time' name='end_time' value=$data.end_time vtype='required'}></td>
|
|
</tr>
|
|
<tr>
|
|
<th>规则应用等级</th>
|
|
<td><{input type='text' vtype='unsignedint' name='priority' value=$data.priority|default:99 size=8}></td>
|
|
</tr>
|
|
<tr>
|
|
<th><span class="red">*</span> 应用启用状态 :</th>
|
|
<td><{if $data.using=='true'}>启用<{else}>停用<{/if}></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
</form>
|
|
</div>
|
|
|
|
<{capture name='footbar'}>
|
|
<div class='table-action'>
|
|
<{button type='button' label='确认' id='regulation-apply-submit'}>
|
|
<{button type='button' label='取消' onclick='javascript:window.close();'}>
|
|
</div>
|
|
<{/capture}>
|
|
<script>
|
|
function isAll(el){
|
|
if (el.checked) {
|
|
el.getParent('td').getElements('.object-select').setStyle('display','none');
|
|
}else{
|
|
el.getParent('td').getElements('.object-select').setStyle('display','inline-block');
|
|
}
|
|
}
|
|
void function(){
|
|
|
|
$('regulation-apply-submit').addEvent('click',function(){
|
|
var form = $('regulation-apply-form');
|
|
|
|
W.page(form.action,{
|
|
data:form,
|
|
onComplete:function(resp){
|
|
resp = JSON.decode(resp);
|
|
if (resp.error)
|
|
{
|
|
MessageBox.error(resp.error);
|
|
return ;
|
|
}
|
|
|
|
opener.finderGroup["<{$env.get._finder.finder_id}>"].refresh.delay(400,opener.finderGroup["<{$env.get._finder.finder_id}>"]);
|
|
setTimeout("window.close()",200);
|
|
}
|
|
});
|
|
});
|
|
|
|
$ES('#regulation-apply-form #apply-range input[name="rangetype"]').addEvent('click',function(){
|
|
if (this.value=='all')
|
|
{
|
|
$E('#regulation-apply-form #apply-range #shops').hide();
|
|
}else{
|
|
$E('#regulation-apply-form #apply-range #shops').show();
|
|
}
|
|
});
|
|
|
|
// $ES('#regulation-apply-form #condition-tr input[type="radio"]').addEvent('click',function(){
|
|
// $ES('#regulation-apply-form .choose').hide();
|
|
// $ES('#regulation-apply-form .choose input').set('disabled',true);
|
|
// $E('#regulation-apply-form #'+this.get('choose')).show();
|
|
// $ES('#regulation-apply-form #'+this.get('choose')+ ' input').set('disabled',false);
|
|
// });
|
|
|
|
show_object_select();
|
|
function show_object_select(){
|
|
var id = "<{$data.apply_goods.id}>";
|
|
var condition = "<{$data.condition}>";
|
|
if (id=='_ALL_') {
|
|
if (condition=='stock')
|
|
{
|
|
var _handle = $E('#choose_stock');
|
|
}else{
|
|
var _handle = $E('#choose_frame');
|
|
}
|
|
|
|
_handle.getElements('.object-select').setStyle('display','none');
|
|
};
|
|
}
|
|
|
|
init_apply_goods();
|
|
function init_apply_goods(){
|
|
var init_bn = "<{$init_bn}>";
|
|
var condition = "<{$data.condition}>";
|
|
var merchandise_id = "<{$data.apply_goods.id}>";
|
|
if (!merchandise_id || merchandise_id=='_ALL_') {return};
|
|
|
|
if (condition=='stock')
|
|
{
|
|
var _handle = $E('#choose_stock .gridlist');
|
|
}else{
|
|
var _handle = $E('#choose_frame .gridlist');
|
|
}
|
|
var data = "<{$apply_goods_query}>";
|
|
if (!data)
|
|
{
|
|
return ;
|
|
}
|
|
data += '&condition='+condition+'&init_bn='+init_bn;
|
|
new Request({
|
|
url:'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_filter',
|
|
onComplete:function(resp){
|
|
resp = JSON.decode(resp);
|
|
if (resp.error) {
|
|
MessageBox.error(resp.error);
|
|
return;
|
|
}
|
|
_handle.setHTML(resp.success);
|
|
}
|
|
}).send(data);
|
|
}
|
|
|
|
init_apply_filter();
|
|
function init_apply_filter(){
|
|
var init_bn = "<{$init_bn}>";
|
|
var condition = "<{$data.condition}>";
|
|
var merchandise_id = "<{$data.apply_goods.id}>";
|
|
var apply_goods = "<{$data.apply_goods}>";
|
|
if (merchandise_id || !apply_goods) {return};
|
|
|
|
if (condition=='stock')
|
|
{
|
|
var _handle = $E('#choose_stock .gridlist');
|
|
}else{
|
|
var _handle = $E('#choose_frame .gridlist');
|
|
}
|
|
var data = "<{$apply_goods_query}>";
|
|
data = data.replace(/(&)/g,',');
|
|
data = data.replace(/(&)/g,',');
|
|
|
|
data = 'filter[advance]='+data;
|
|
if (!data)
|
|
{
|
|
return ;
|
|
}
|
|
data += '&condition='+condition+'&init_bn='+init_bn;
|
|
new Request({
|
|
url:'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_filter_array',
|
|
onComplete:function(resp){
|
|
resp = JSON.decode(resp);
|
|
if (resp.error) {
|
|
MessageBox.error(resp.error);
|
|
return;
|
|
}
|
|
_handle.setHTML(resp.success);
|
|
}
|
|
}).send(data);
|
|
|
|
}
|
|
$ES('#regulation-apply-form .choose .filters').addEvent('click',function(){
|
|
var t_url = 'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_dialog_filter';
|
|
//var condition = $E('#regulation-apply-form #condition-tr input[type="radio"]:checked').get('value');
|
|
var condition = $E('#regulation-apply-form #condition-tr input[name="condition"]').get('value');
|
|
var init_bn = $E('#regulation-apply-form input[name="init_bn"]').get('value');
|
|
|
|
t_url += '&condition='+condition;
|
|
|
|
var url='index.php?app=desktop&act=alertpages&goto='+encodeURIComponent(t_url);
|
|
|
|
var _handle = this.getNext('.gridlist');
|
|
//new finderDialog(url);
|
|
Ex_Loader('modedialog',function(){
|
|
filterMDialog = new Class({
|
|
Extends:ModeDialog,
|
|
options:{
|
|
onHide:function(value){
|
|
var params=this.options.params;
|
|
var data = params.postdata;
|
|
data += value ? '&filter[advance]='+value : '';
|
|
new Request({url:params.url,onSuccess:function(rs){
|
|
this.fireEvent('callback',rs);
|
|
}.bind(this)}).send(data);
|
|
}
|
|
},
|
|
submit:function(win){
|
|
var f = this.doc.getElement('div[id^=filter-list-]');
|
|
var qstr = f.toQueryString(
|
|
function(el) {
|
|
var elp = $(el).getParent('dl'),m;
|
|
|
|
if(!elp||!elp.isDisplay()||!!!$(el).value)return;
|
|
|
|
if(m = el.name.match(/_([\s\S]+)_search/)){
|
|
if(!!!f.getElement('*[name='+m[1]+']').value)return;
|
|
}
|
|
|
|
if(el.name.match(/_DTYPE_TIME/)){
|
|
if(!!!f.getElement('*[name='+el.value+']').value)return;
|
|
}
|
|
|
|
if(m=el.name.match(/_DTIME_\[([^\]]+)\]\[([^\]]+)\]/)){
|
|
if(!!!f.getElement('*[name='+m[2]+']').value)return;
|
|
}
|
|
return true;
|
|
},true);
|
|
qstr = qstr.replace(/(&)/g,',');
|
|
qstr = qstr.replace(/(&)/g,',');
|
|
win.returnValue=qstr;
|
|
}
|
|
});
|
|
new filterMDialog(url,{
|
|
params: {
|
|
url: 'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_filter_array',
|
|
postdata:'condition='+condition+'&init_bn='+init_bn
|
|
},
|
|
onCallback: function(data) {
|
|
|
|
data = JSON.decode(data);
|
|
if (data.error) {
|
|
MessageBox.error(data.error);
|
|
return;
|
|
}
|
|
_handle.setHTML(data.success);
|
|
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
$ES('#regulation-apply-form .choose .ids').addEvent('click',function(){
|
|
var _handle = this.getNext('.gridlist');
|
|
Ex_Loader('modedialog',function(){
|
|
idmFinderDialog=new Class({
|
|
Extends:finderDialog,
|
|
options:{
|
|
onHide:function(value){
|
|
if(!value||!value.length)return;
|
|
var tmpForm=new Element('div'),fdoc=document.createDocumentFragment();
|
|
var params=this.options.params;
|
|
for(var i=0,l=value.length;i<l;i++){
|
|
fdoc.appendChild(new Element('input',{type:'hidden','name':params.name,value:value[i]}));
|
|
}
|
|
tmpForm.appendChild(fdoc);
|
|
var data=(params.postdata)?tmpForm.toQueryString()+'&'+params.postdata:tmpForm.toQueryString();
|
|
data = this.filterData?data+'&filter[advance]='+this.filterData:data;
|
|
new Request({url:params.url,onSuccess:function(rs){
|
|
tmpForm.destroy();
|
|
if(params.type)this.options.select(params,rs,value);
|
|
this.fireEvent('callback',rs);
|
|
}.bind(this)}).send(data);
|
|
}
|
|
},
|
|
submit:function(win){
|
|
var form=this.doc.getElement('form[id^=finder-form-]');
|
|
var value=form.retrieve('rowselected','');
|
|
var data = decodeURI(form.getElement('input[id^=finder-filter-]').value);
|
|
var params = this.options.params;
|
|
if(params.app&&data&&value=='_ALL_') {
|
|
data = data.replace(/(&)/g,',');
|
|
data = data.replace(/(&)/g,',');
|
|
this.filterData = data;
|
|
}
|
|
|
|
if(!value || !value.length) return;
|
|
win.returnValue=value.toString().split(',');
|
|
}
|
|
});
|
|
|
|
var init_bn = $E('#regulation-apply-form input[name="init_bn"]').get('value');
|
|
//var condition = $E('#regulation-apply-form #condition-tr input[type="radio"]:checked').get('value');
|
|
var condition = $E('#regulation-apply-form #condition-tr input[name="condition"]').get('value');
|
|
var shop_id = '';
|
|
var rangetype = $ES('#regulation-apply-form #apply-range input[name="rangetype"]:checked');
|
|
|
|
if (rangetype.get('value') == 'all')
|
|
{
|
|
shop_id = 'shop[0]=_ALL_';
|
|
}else if(rangetype.get('value') == 'some'){
|
|
shop_id = $E('#regulation-apply-form #apply-range ul').toQueryString();
|
|
}
|
|
|
|
var t_url = 'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_finder';
|
|
t_url += '&condition='+condition;
|
|
t_url += '&'+shop_id;
|
|
|
|
var url='index.php?app=desktop&act=alertpages&goto='+encodeURIComponent(t_url);
|
|
|
|
new idmFinderDialog(url, {
|
|
params: {
|
|
url: 'index.php?app=inventorydepth&ctl=regulation_apply&act=merchandise_filter',
|
|
name:'id[]',
|
|
app:'true',
|
|
postdata:'condition='+condition+'&init_bn='+init_bn+'&'+shop_id
|
|
},
|
|
onCallback: function(data) {
|
|
data = JSON.decode(data);
|
|
if (data.error) {
|
|
MessageBox.error(data.error);
|
|
return;
|
|
}
|
|
_handle.setHTML(data.success);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}();
|
|
</script> |