mirror of https://gitee.com/karson/fastadmin.git
parent
8066902212
commit
193f33f11a
|
|
@ -21,7 +21,7 @@ class Config extends Backend
|
||||||
* @var \app\common\model\Config
|
* @var \app\common\model\Config
|
||||||
*/
|
*/
|
||||||
protected $model = null;
|
protected $model = null;
|
||||||
protected $noNeedRight = ['check'];
|
protected $noNeedRight = ['check', 'rulelist'];
|
||||||
|
|
||||||
public function _initialize()
|
public function _initialize()
|
||||||
{
|
{
|
||||||
|
|
@ -62,6 +62,7 @@ class Config extends Backend
|
||||||
}
|
}
|
||||||
$this->view->assign('siteList', $siteList);
|
$this->view->assign('siteList', $siteList);
|
||||||
$this->view->assign('typeList', ConfigModel::getTypeList());
|
$this->view->assign('typeList', ConfigModel::getTypeList());
|
||||||
|
$this->view->assign('ruleList', ConfigModel::getRegexList());
|
||||||
$this->view->assign('groupList', ConfigModel::getGroupList());
|
$this->view->assign('groupList', ConfigModel::getGroupList());
|
||||||
return $this->view->fetch();
|
return $this->view->fetch();
|
||||||
}
|
}
|
||||||
|
|
@ -201,6 +202,32 @@ class Config extends Backend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则列表
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function rulelist()
|
||||||
|
{
|
||||||
|
//主键
|
||||||
|
$primarykey = $this->request->request("keyField");
|
||||||
|
//主键值
|
||||||
|
$keyValue = $this->request->request("keyValue", "");
|
||||||
|
|
||||||
|
$keyValueArr = array_filter(explode(',', $keyValue));
|
||||||
|
$regexList = \app\common\model\Config::getRegexList();
|
||||||
|
$list = [];
|
||||||
|
foreach ($regexList as $k => $v) {
|
||||||
|
if ($keyValueArr) {
|
||||||
|
if (in_array($k, $keyValueArr)) {
|
||||||
|
$list[] = ['id' => $k, 'name' => $v];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$list[] = ['id' => $k, 'name' => $v];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return json(['list' => $list]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送测试邮件
|
* 发送测试邮件
|
||||||
* @internal
|
* @internal
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ return [
|
||||||
'Array' => '数组',
|
'Array' => '数组',
|
||||||
'Array key' => '键名',
|
'Array key' => '键名',
|
||||||
'Array value' => '键值',
|
'Array value' => '键值',
|
||||||
|
'Custom' => '自定义',
|
||||||
'Content' => '数据列表',
|
'Content' => '数据列表',
|
||||||
'Rule' => '校验规则',
|
'Rule' => '校验规则',
|
||||||
'Site name' => '站点名称',
|
'Site name' => '站点名称',
|
||||||
|
|
@ -45,6 +46,8 @@ return [
|
||||||
'Fixed page' => '后台固定页',
|
'Fixed page' => '后台固定页',
|
||||||
'Category type' => '分类类型',
|
'Category type' => '分类类型',
|
||||||
'Config group' => '配置分组',
|
'Config group' => '配置分组',
|
||||||
|
'Rule tips' => '校验规则使用请参考Nice-validator文档',
|
||||||
|
'Extend tips' => '扩展属性支持{id}、{name}、{group}、{title}、{value}、{content}、{rule}替换',
|
||||||
'Mail type' => '邮件发送方式',
|
'Mail type' => '邮件发送方式',
|
||||||
'Mail smtp host' => 'SMTP服务器',
|
'Mail smtp host' => 'SMTP服务器',
|
||||||
'Mail smtp port' => 'SMTP端口',
|
'Mail smtp port' => 'SMTP端口',
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,23 @@
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@media (max-width: 375px) {
|
@media (max-width: 375px) {
|
||||||
.edit-form tr td input{width:100%;}
|
.edit-form tr td input {
|
||||||
.edit-form tr th:first-child,.edit-form tr td:first-child{
|
width: 100%;
|
||||||
width:20%;
|
|
||||||
}
|
}
|
||||||
.edit-form tr th:nth-last-of-type(-n+2),.edit-form tr td:nth-last-of-type(-n+2){
|
|
||||||
|
.edit-form tr th:first-child, .edit-form tr td:first-child {
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-form tr th:nth-last-of-type(-n+2), .edit-form tr td:nth-last-of-type(-n+2) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.edit-form table > tbody > tr td a.btn-delcfg{
|
|
||||||
|
.edit-form table > tbody > tr td a.btn-delcfg {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.edit-form table > tbody > tr:hover td a.btn-delcfg{
|
|
||||||
|
.edit-form table > tbody > tr:hover td a.btn-delcfg {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -19,132 +25,136 @@
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
{:build_heading(null, false)}
|
{:build_heading(null, false)}
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
{foreach $siteList as $index=>$vo}
|
{foreach $siteList as $index=>$vo}
|
||||||
<li class="{$vo.active?'active':''}"><a href="#{$vo.name}" data-toggle="tab">{:__($vo.title)}</a></li>
|
<li class="{$vo.active?'active':''}"><a href="#{$vo.name}" data-toggle="tab">{:__($vo.title)}</a></li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
<li>
|
<li data-toggle="tooltip" title="{:__('Add new config')}">
|
||||||
<a href="#addcfg" data-toggle="tab" title="{:__('Add new config')}"><i class="fa fa-plus"></i></a>
|
<a href="#addcfg" data-toggle="tab"><i class="fa fa-plus"></i></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div id="myTabContent" class="tab-content">
|
<div id="myTabContent" class="tab-content">
|
||||||
{foreach $siteList as $index=>$vo}
|
{foreach $siteList as $index=>$vo}
|
||||||
<div class="tab-pane fade {$vo.active ? 'active in' : ''}" id="{$vo.name}">
|
<div class="tab-pane fade {$vo.active ? 'active in' : ''}" id="{$vo.name}">
|
||||||
<div class="widget-body no-padding">
|
<div class="widget-body no-padding">
|
||||||
<form id="{$vo.name}-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('general.config/edit')}">
|
<form id="{$vo.name}-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('general.config/edit')}">
|
||||||
{:token()}
|
{:token()}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="15%">{:__('Title')}</th>
|
<th width="15%">{:__('Title')}</th>
|
||||||
<th width="68%">{:__('Value')}</th>
|
<th width="68%">{:__('Value')}</th>
|
||||||
<th width="15%">{:__('Name')}</th>
|
<th width="15%">{:__('Name')}</th>
|
||||||
<th width="2%"></th>
|
<th width="2%"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{foreach $vo.list as $item}
|
{foreach $vo.list as $item}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$item.title}</td>
|
<td>{$item.title}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8 col-xs-12">
|
<div class="col-sm-8 col-xs-12">
|
||||||
{switch $item.type}
|
{switch $item.type}
|
||||||
{case string}
|
{case string}
|
||||||
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value|htmlentities}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}" />
|
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value|htmlentities}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case text}
|
{case text}
|
||||||
<textarea {$item.extend} name="row[{$item.name}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value|htmlentities}</textarea>
|
<textarea {$item.extend} name="row[{$item.name}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value|htmlentities}</textarea>
|
||||||
{/case}
|
{/case}
|
||||||
{case editor}
|
{case editor}
|
||||||
<textarea {$item.extend} name="row[{$item.name}]" id="editor-{$item.name}" class="form-control editor" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value|htmlentities}</textarea>
|
<textarea {$item.extend} name="row[{$item.name}]" id="editor-{$item.name}" class="form-control editor" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value|htmlentities}</textarea>
|
||||||
{/case}
|
{/case}
|
||||||
{case array}
|
{case array}
|
||||||
<dl class="fieldlist" data-name="row[{$item.name}]">
|
<dl class="fieldlist" data-name="row[{$item.name}]">
|
||||||
<dd>
|
<dd>
|
||||||
<ins>{:__('Array key')}</ins>
|
<ins>{:__('Array key')}</ins>
|
||||||
<ins>{:__('Array value')}</ins>
|
<ins>{:__('Array value')}</ins>
|
||||||
</dd>
|
</dd>
|
||||||
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||||
<textarea name="row[{$item.name}]" class="form-control hide" cols="30" rows="5">{$item.value|htmlentities}</textarea>
|
<textarea name="row[{$item.name}]" class="form-control hide" cols="30" rows="5">{$item.value|htmlentities}</textarea>
|
||||||
</dl>
|
</dl>
|
||||||
{/case}
|
{/case}
|
||||||
{case datetime}
|
{case datetime}
|
||||||
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control datetimepicker" data-tip="{$item.tip}" data-rule="{$item.rule}" />
|
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control datetimepicker" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case number}
|
{case number}
|
||||||
<input {$item.extend} type="number" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}" />
|
<input {$item.extend} type="number" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case checkbox}
|
{case checkbox}
|
||||||
|
{foreach name="item.content" item="vo"}
|
||||||
|
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
|
||||||
|
{/foreach}
|
||||||
|
{/case}
|
||||||
|
{case radio}
|
||||||
|
{foreach name="item.content" item="vo"}
|
||||||
|
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
|
||||||
|
{/foreach}
|
||||||
|
{/case}
|
||||||
|
{case value="select" break="0"}{/case}
|
||||||
|
{case value="selects"}
|
||||||
|
<select {$item.extend} name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-tip="{$item.tip}" {$item.type=='selects'?'multiple':''}>
|
||||||
{foreach name="item.content" item="vo"}
|
{foreach name="item.content" item="vo"}
|
||||||
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
|
<option value="{$key}" {in name="key" value="$item.value" }selected{
|
||||||
|
/in}>{$vo}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/case}
|
</select>
|
||||||
{case radio}
|
{/case}
|
||||||
{foreach name="item.content" item="vo"}
|
{case value="image" break="0"}{/case}
|
||||||
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
|
{case value="images"}
|
||||||
{/foreach}
|
<div class="form-inline">
|
||||||
{/case}
|
<input id="c-{$item.name}" class="form-control" size="50" name="row[{$item.name}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
|
||||||
{case value="select" break="0"}{/case}
|
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}" data-preview-id="p-{$item.name}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
{case value="selects"}
|
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
<select {$item.extend} name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-tip="{$item.tip}" {$item.type=='selects'?'multiple':''}>
|
<span class="msg-box n-right" for="c-{$item.name}"></span>
|
||||||
{foreach name="item.content" item="vo"}
|
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
|
||||||
<option value="{$key}" {in name="key" value="$item.value"}selected{/in}>{$vo}</option>
|
|
||||||
{/foreach}
|
|
||||||
</select>
|
|
||||||
{/case}
|
|
||||||
{case value="image" break="0"}{/case}
|
|
||||||
{case value="images"}
|
|
||||||
<div class="form-inline">
|
|
||||||
<input id="c-{$item.name}" class="form-control" size="50" name="row[{$item.name}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
|
|
||||||
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}" data-preview-id="p-{$item.name}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
|
||||||
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
|
||||||
<span class="msg-box n-right" for="c-{$item.name}"></span>
|
|
||||||
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
|
|
||||||
</div>
|
|
||||||
{/case}
|
|
||||||
{case value="file" break="0"}{/case}
|
|
||||||
{case value="files"}
|
|
||||||
<div class="form-inline">
|
|
||||||
<input id="c-{$item.name}" class="form-control" size="50" name="row[{$item.name}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
|
|
||||||
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
|
||||||
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
|
||||||
<span class="msg-box n-right" for="c-{$item.name}"></span>
|
|
||||||
</div>
|
|
||||||
{/case}
|
|
||||||
{case switch}
|
|
||||||
<input id="c-{$item.name}" name="row[{$item.name}]" type="hidden" value="{:$item.value?1:0}">
|
|
||||||
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-{$item.name}" data-yes="1" data-no="0" >
|
|
||||||
<i class="fa fa-toggle-on text-success {if !$item.value}fa-flip-horizontal text-gray{/if} fa-2x"></i>
|
|
||||||
</a>
|
|
||||||
{/case}
|
|
||||||
{case bool}
|
|
||||||
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
|
|
||||||
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
|
|
||||||
{/case}
|
|
||||||
{/switch}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4"></div>
|
{/case}
|
||||||
|
{case value="file" break="0"}{/case}
|
||||||
|
{case value="files"}
|
||||||
|
<div class="form-inline">
|
||||||
|
<input id="c-{$item.name}" class="form-control" size="50" name="row[{$item.name}]" type="text" value="{$item.value|htmlentities}" data-tip="{$item.tip}">
|
||||||
|
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
|
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
|
<span class="msg-box n-right" for="c-{$item.name}"></span>
|
||||||
|
</div>
|
||||||
|
{/case}
|
||||||
|
{case switch}
|
||||||
|
<input id="c-{$item.name}" name="row[{$item.name}]" type="hidden" value="{:$item.value?1:0}">
|
||||||
|
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-{$item.name}" data-yes="1" data-no="0">
|
||||||
|
<i class="fa fa-toggle-on text-success {if !$item.value}fa-flip-horizontal text-gray{/if} fa-2x"></i>
|
||||||
|
</a>
|
||||||
|
{/case}
|
||||||
|
{case bool}
|
||||||
|
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
|
||||||
|
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
|
||||||
|
{/case}
|
||||||
|
{case custom}
|
||||||
|
{$item.extend}
|
||||||
|
{/case}
|
||||||
|
{/switch}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-4"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td>{php}echo "{\$site.". $item['name'] . "}";{/php}</td>
|
<td>{php}echo "{\$site.". $item['name'] . "}";{/php}</td>
|
||||||
<td><a href="javascript:;" class="btn-delcfg text-muted" data-name="{$item.name}"><i class="fa fa-times"></i></a></td>
|
<td><a href="javascript:;" class="btn-delcfg text-muted" data-name="{$item.name}"><i class="fa fa-times"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>
|
<button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>
|
||||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
|
@ -153,22 +163,25 @@
|
||||||
{/foreach}
|
{/foreach}
|
||||||
<div class="tab-pane fade" id="addcfg">
|
<div class="tab-pane fade" id="addcfg">
|
||||||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('general.config/add')}">
|
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('general.config/add')}">
|
||||||
|
{:token()}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<select name="row[type]" class="form-control selectpicker">
|
<select name="row[type]" class="form-control selectpicker">
|
||||||
{foreach name="typeList" item="vo"}
|
{foreach name="typeList" item="vo"}
|
||||||
<option value="{$key}" {in name="key" value="string"}selected{/in}>{$vo}</option>
|
<option value="{$key}" {in name="key" value="string" }selected{
|
||||||
|
/in}>{$vo}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="group" class="control-label col-xs-12 col-sm-2">{:__('Group')}:</label>
|
<label class="control-label col-xs-12 col-sm-2">{:__('Group')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<select name="row[group]" class="form-control selectpicker">
|
<select name="row[group]" class="form-control selectpicker">
|
||||||
{foreach name="groupList" item="vo"}
|
{foreach name="groupList" item="vo"}
|
||||||
<option value="{$key}" {in name="key" value="basic"}selected{/in}>{$vo}</option>
|
<option value="{$key}" {in name="key" value="basic" }selected{
|
||||||
|
/in}>{$vo}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -176,44 +189,55 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required; length(3~30); remote(general/config/check)" />
|
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required; length(3~30); remote(general/config/check)"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
<label for="title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<input type="text" class="form-control" id="title" name="row[title]" value="" data-rule="required" />
|
<input type="text" class="form-control" id="title" name="row[title]" value="" data-rule="required"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="value" class="control-label col-xs-12 col-sm-2">{:__('Value')}:</label>
|
<label for="value" class="control-label col-xs-12 col-sm-2">{:__('Value')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<input type="text" class="form-control" id="value" name="row[value]" value="" data-rule="" />
|
<input type="text" class="form-control" id="value" name="row[value]" value="" data-rule=""/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group hide" id="add-content-container">
|
<div class="form-group hide" id="add-content-container">
|
||||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<textarea name="row[content]" id="content" cols="30" rows="5" class="form-control" data-rule="required">value1|title1
|
<textarea name="row[content]" id="content" cols="30" rows="5" class="form-control" data-rule="required(content)">value1|title1
|
||||||
value2|title2</textarea>
|
value2|title2</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="tip" class="control-label col-xs-12 col-sm-2">{:__('Tip')}:</label>
|
<label for="tip" class="control-label col-xs-12 col-sm-2">{:__('Tip')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<input type="text" class="form-control" id="tip" name="row[tip]" value="" data-rule="" />
|
<input type="text" class="form-control" id="tip" name="row[tip]" value="" data-rule=""/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="rule" class="control-label col-xs-12 col-sm-2">{:__('Rule')}:</label>
|
<label for="rule" class="control-label col-xs-12 col-sm-2">{:__('Rule')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<input type="text" class="form-control" id="rule" name="row[rule]" value="" />
|
<div class="input-group pull-left">
|
||||||
|
<input type="text" class="form-control" id="rule" name="row[rule]" value="" data-tip="{:__('Rule tips')}"/>
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" type="button">{:__('Choose')}</button>
|
||||||
|
<ul class="dropdown-menu pull-right rulelist">
|
||||||
|
{volist name="ruleList" id="item"}
|
||||||
|
<li><a href="javascript:;" data-value="{$key}">{$item}<span class="text-muted">({$key})</span></a></li>
|
||||||
|
{/volist}
|
||||||
|
</ul>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span class="msg-box n-right" for="rule"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="extend" class="control-label col-xs-12 col-sm-2">{:__('Extend')}:</label>
|
<label for="extend" class="control-label col-xs-12 col-sm-2">{:__('Extend')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<textarea name="row[extend]" id="extend" cols="30" rows="5" class="form-control" data-rule=""></textarea>
|
<textarea name="row[extend]" id="extend" cols="30" rows="5" class="form-control" data-tip="{:__('Extend tips')}" data-rule="required(extend)" data-msg-extend="当类型为自定义时,扩展属性不能为空"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,16 @@ class Config extends Model
|
||||||
return $regexList;
|
return $regexList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getExtendAttr($value, $data)
|
||||||
|
{
|
||||||
|
$result = preg_replace_callback("/\{([a-zA-Z]+)\}/", function ($matches) use ($data) {
|
||||||
|
if (isset($data[$matches[1]])) {
|
||||||
|
return $data[$matches[1]];
|
||||||
|
}
|
||||||
|
}, $data['extend']);
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取分类分组列表
|
* 读取分类分组列表
|
||||||
* @return array
|
* @return array
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,21 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
||||||
Form.api.bindevent($("form.edit-form"));
|
Form.api.bindevent($("form.edit-form"));
|
||||||
|
|
||||||
//不可见的元素不验证
|
//不可见的元素不验证
|
||||||
$("form#add-form").data("validator-options", {ignore: ':hidden'});
|
$("form#add-form").data("validator-options", {
|
||||||
Form.api.bindevent($("form#add-form"), null, function (ret) {
|
ignore: ':hidden',
|
||||||
location.reload();
|
rules: {
|
||||||
|
content: function () {
|
||||||
|
return ['radio', 'checkbox', 'select', 'selects'].indexOf($("#add-form select[name='row[type]']").val()) > -1;
|
||||||
|
},
|
||||||
|
extend: function () {
|
||||||
|
return $("#add-form select[name='row[type]']").val() == 'custom';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Form.api.bindevent($("form#add-form"), function (ret) {
|
||||||
|
setTimeout(function () {
|
||||||
|
location.reload();
|
||||||
|
}, 1500);
|
||||||
});
|
});
|
||||||
|
|
||||||
//切换显示隐藏变量字典列表
|
//切换显示隐藏变量字典列表
|
||||||
|
|
@ -61,6 +73,20 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
||||||
$("#add-content-container").toggleClass("hide", ['select', 'selects', 'checkbox', 'radio'].indexOf($(this).val()) > -1 ? false : true);
|
$("#add-content-container").toggleClass("hide", ['select', 'selects', 'checkbox', 'radio'].indexOf($(this).val()) > -1 ? false : true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//选择规则
|
||||||
|
$(document).on("click", ".rulelist > li > a", function () {
|
||||||
|
var ruleArr = $("#rule").val() == '' ? [] : $("#rule").val().split(";");
|
||||||
|
var rule = $(this).data("value");
|
||||||
|
var index = ruleArr.indexOf(rule);
|
||||||
|
if (index > -1) {
|
||||||
|
ruleArr.splice(index, 1);
|
||||||
|
} else {
|
||||||
|
ruleArr.push(rule);
|
||||||
|
}
|
||||||
|
$("#rule").val(ruleArr.join(";"));
|
||||||
|
$(this).parent().toggleClass("active");
|
||||||
|
});
|
||||||
|
|
||||||
//添加向发件人发送测试邮件按钮和方法
|
//添加向发件人发送测试邮件按钮和方法
|
||||||
$('input[name="row[mail_from]"]').parent().next().append('<a class="btn btn-info testmail">' + __('Send a test message') + '</a>');
|
$('input[name="row[mail_from]"]').parent().next().append('<a class="btn btn-info testmail">' + __('Send a test message') + '</a>');
|
||||||
$(document).on("click", ".testmail", function () {
|
$(document).on("click", ".testmail", function () {
|
||||||
|
|
@ -77,7 +103,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
||||||
//删除配置
|
//删除配置
|
||||||
$(document).on("click", ".btn-delcfg", function () {
|
$(document).on("click", ".btn-delcfg", function () {
|
||||||
var that = this;
|
var that = this;
|
||||||
Layer.confirm(__('Are you sure you want to delete this item?'), {icon: 3, title:'提示'}, function (index) {
|
Layer.confirm(__('Are you sure you want to delete this item?'), {
|
||||||
|
icon: 3,
|
||||||
|
title: '提示'
|
||||||
|
}, function (index) {
|
||||||
Backend.api.ajax({
|
Backend.api.ajax({
|
||||||
url: "general/config/del",
|
url: "general/config/del",
|
||||||
data: {name: $(that).data("name")}
|
data: {name: $(that).data("name")}
|
||||||
|
|
|
||||||
|
|
@ -7295,6 +7295,9 @@ define('upload',['jquery', 'bootstrap', 'plupload', 'template'], function ($, un
|
||||||
elem = el.name && _checkable(el) ? me.$el.find('input[name="'+ el.name +'"]').get(0) : el;
|
elem = el.name && _checkable(el) ? me.$el.find('input[name="'+ el.name +'"]').get(0) : el;
|
||||||
// Get field
|
// Get field
|
||||||
if (!(field = me.getField(elem)) || !field.rule) {
|
if (!(field = me.getField(elem)) || !field.rule) {
|
||||||
|
if(!field.rule){
|
||||||
|
me.hideMsg(el);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Cache event type
|
// Cache event type
|
||||||
|
|
@ -9355,7 +9358,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
|
||||||
complete: function (xhr) {
|
complete: function (xhr) {
|
||||||
var token = xhr.getResponseHeader('__token__');
|
var token = xhr.getResponseHeader('__token__');
|
||||||
if (token) {
|
if (token) {
|
||||||
$("input[name='__token__']", form).val(token);
|
$("input[name='__token__']").val(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, function (data, ret) {
|
}, function (data, ret) {
|
||||||
|
|
@ -9363,7 +9366,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
|
||||||
if (data && typeof data === 'object') {
|
if (data && typeof data === 'object') {
|
||||||
//刷新客户端token
|
//刷新客户端token
|
||||||
if (typeof data.token !== 'undefined') {
|
if (typeof data.token !== 'undefined') {
|
||||||
$("input[name='__token__']", form).val(data.token);
|
$("input[name='__token__']").val(data.token);
|
||||||
}
|
}
|
||||||
//调用客户端事件
|
//调用客户端事件
|
||||||
if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
|
if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
|
||||||
|
|
@ -9377,7 +9380,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
|
||||||
}
|
}
|
||||||
}, function (data, ret) {
|
}, function (data, ret) {
|
||||||
if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
|
if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
|
||||||
$("input[name='__token__']", form).val(data.token);
|
$("input[name='__token__']").val(data.token);
|
||||||
}
|
}
|
||||||
if (typeof error === 'function') {
|
if (typeof error === 'function') {
|
||||||
if (false === error.call(form, data, ret)) {
|
if (false === error.call(form, data, ret)) {
|
||||||
|
|
@ -11365,7 +11368,7 @@ define("addtabs", function(){});
|
||||||
selectToCloseList: false,
|
selectToCloseList: false,
|
||||||
/**
|
/**
|
||||||
* Init selected item key, the result will match to option.keyField option
|
* Init selected item key, the result will match to option.keyField option
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
initRecord: undefined,
|
initRecord: undefined,
|
||||||
/**
|
/**
|
||||||
|
|
@ -11474,7 +11477,7 @@ define("addtabs", function(){});
|
||||||
* @param data {object} server side return data
|
* @param data {object} server side return data
|
||||||
* @param self {object} plugin object
|
* @param self {object} plugin object
|
||||||
* @return {object} return data format:
|
* @return {object} return data format:
|
||||||
* @example
|
* @example
|
||||||
* {
|
* {
|
||||||
* list : [{name:'aa',sex:1},{name:'bb',sex:1}...],
|
* list : [{name:'aa',sex:1},{name:'bb',sex:1}...],
|
||||||
* totalRow : 100
|
* totalRow : 100
|
||||||
|
|
@ -11638,7 +11641,7 @@ define("addtabs", function(){});
|
||||||
max_selected: 'You can only select up to max_selected_limit items'
|
max_selected: 'You can only select up to max_selected_limit items'
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
// 中文
|
// 中文
|
||||||
case 'cn':
|
case 'cn':
|
||||||
default:
|
default:
|
||||||
message = {
|
message = {
|
||||||
|
|
@ -11784,7 +11787,7 @@ define("addtabs", function(){});
|
||||||
restore = function () {
|
restore = function () {
|
||||||
// restore origin style values
|
// restore origin style values
|
||||||
$hidden.each(function (i) {
|
$hidden.each(function (i) {
|
||||||
var $this = $(this), _tmp = tmp[ i ];
|
var $this = $(this), _tmp = tmp[i];
|
||||||
|
|
||||||
if (_tmp === undefined)
|
if (_tmp === undefined)
|
||||||
$this.removeAttr('style');
|
$this.removeAttr('style');
|
||||||
|
|
@ -11798,8 +11801,8 @@ define("addtabs", function(){});
|
||||||
// it can be 'width', 'height', 'outerWidth', 'innerWidth'... etc
|
// it can be 'width', 'height', 'outerWidth', 'innerWidth'... etc
|
||||||
// configs.includeMargin only works for 'outerWidth' and 'outerHeight'
|
// configs.includeMargin only works for 'outerWidth' and 'outerHeight'
|
||||||
var actual = /(outer)/.test(method) ?
|
var actual = /(outer)/.test(method) ?
|
||||||
$target[ method ](configs.includeMargin) :
|
$target[method](configs.includeMargin) :
|
||||||
$target[ method ]();
|
$target[method]();
|
||||||
|
|
||||||
restore();
|
restore();
|
||||||
// IMPORTANT, this plugin only return the value of the first element
|
// IMPORTANT, this plugin only return the value of the first element
|
||||||
|
|
@ -11813,13 +11816,17 @@ define("addtabs", function(){});
|
||||||
SelectPage.prototype.setElem = function (combo_input) {
|
SelectPage.prototype.setElem = function (combo_input) {
|
||||||
// 1. build Dom object
|
// 1. build Dom object
|
||||||
var elem = {}, p = this.option, css = this.css_class, msg = this.message, input = $(combo_input);
|
var elem = {}, p = this.option, css = this.css_class, msg = this.message, input = $(combo_input);
|
||||||
|
var cssWidth = input.css("width");
|
||||||
var orgWidth = input.outerWidth();
|
var orgWidth = input.outerWidth();
|
||||||
// fix input width in hidden situation
|
if (cssWidth.indexOf("%") > -1 || input.parent().size() > 0 && input.parent().width() == orgWidth) {
|
||||||
if (orgWidth <= 0)
|
orgWidth = "100%";
|
||||||
orgWidth = this.elementRealSize(input, 'outerWidth');
|
} else {
|
||||||
if (orgWidth < 150)
|
// fix input width in hidden situation
|
||||||
orgWidth = 150;
|
if (orgWidth <= 0)
|
||||||
|
orgWidth = this.elementRealSize(input, 'outerWidth');
|
||||||
|
if (orgWidth < 150)
|
||||||
|
orgWidth = 150;
|
||||||
|
}
|
||||||
elem.combo_input = input.attr({'autocomplete': 'off'}).addClass(css.input).wrap('<div>');
|
elem.combo_input = input.attr({'autocomplete': 'off'}).addClass(css.input).wrap('<div>');
|
||||||
if (p.selectOnly)
|
if (p.selectOnly)
|
||||||
elem.combo_input.prop('readonly', true);
|
elem.combo_input.prop('readonly', true);
|
||||||
|
|
@ -11854,10 +11861,10 @@ define("addtabs", function(){});
|
||||||
elem.results = $('<ul>').addClass(css.results);
|
elem.results = $('<ul>').addClass(css.results);
|
||||||
|
|
||||||
var namePrefix = '_text',
|
var namePrefix = '_text',
|
||||||
input_id = elem.combo_input.attr('id') || elem.combo_input.attr('name'),
|
input_id = elem.combo_input.attr('id') || elem.combo_input.attr('name'),
|
||||||
input_name = elem.combo_input.attr('name') || 'selectPage',
|
input_name = elem.combo_input.attr('name') || 'selectPage',
|
||||||
hidden_name = input_name,
|
hidden_name = input_name,
|
||||||
hidden_id = input_id;
|
hidden_id = input_id;
|
||||||
|
|
||||||
//switch the id and name attributes of input/hidden element
|
//switch the id and name attributes of input/hidden element
|
||||||
elem.hidden = $('<input type="hidden" class="sp_hidden" />').attr({
|
elem.hidden = $('<input type="hidden" class="sp_hidden" />').attr({
|
||||||
|
|
@ -11865,7 +11872,7 @@ define("addtabs", function(){});
|
||||||
id: hidden_id
|
id: hidden_id
|
||||||
}).val('');
|
}).val('');
|
||||||
elem.combo_input.attr({
|
elem.combo_input.attr({
|
||||||
name: input_name + namePrefix,
|
name: typeof input.data('name') !== 'undefined' ? input.data('name') : input_name + namePrefix,
|
||||||
id: input_id + namePrefix
|
id: input_id + namePrefix
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -11961,20 +11968,32 @@ define("addtabs", function(){});
|
||||||
data = [data[0]];
|
data = [data[0]];
|
||||||
self.afterInit(self, data);
|
self.afterInit(self, data);
|
||||||
} else {//ajax data source mode to init selected item
|
} else {//ajax data source mode to init selected item
|
||||||
|
var _paramsFunc = p.params, _params = {}, searchKey = p.searchField;
|
||||||
|
var _orgParams = {
|
||||||
|
searchTable: p.dbTable,
|
||||||
|
searchKey: p.keyField,
|
||||||
|
searchValue: key,
|
||||||
|
orderBy: p.orderBy,
|
||||||
|
showField: p.showField,
|
||||||
|
keyField: p.keyField,
|
||||||
|
keyValue: key,
|
||||||
|
searchField: p.searchField
|
||||||
|
};
|
||||||
|
if (_paramsFunc) {
|
||||||
|
var result = $.isFunction(_paramsFunc) ? _paramsFunc(self) : _paramsFunc;
|
||||||
|
if (result && $.isPlainObject(result)) {
|
||||||
|
_params = $.extend({}, _orgParams, result);
|
||||||
|
} else {
|
||||||
|
_params = _orgParams;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_params = _orgParams;
|
||||||
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: p.data,
|
url: p.data,
|
||||||
data: {
|
data: _params,
|
||||||
searchTable: p.dbTable,
|
|
||||||
searchKey: p.keyField,
|
|
||||||
searchValue: key,
|
|
||||||
orderBy: p.orderBy,
|
|
||||||
showField: p.showField,
|
|
||||||
keyField: p.keyField,
|
|
||||||
keyValue: key,
|
|
||||||
searchField: p.searchField
|
|
||||||
},
|
|
||||||
success: function (json) {
|
success: function (json) {
|
||||||
var d = null;
|
var d = null;
|
||||||
if (p.eAjaxSuccess && $.isFunction(p.eAjaxSuccess))
|
if (p.eAjaxSuccess && $.isFunction(p.eAjaxSuccess))
|
||||||
|
|
@ -12226,14 +12245,14 @@ define("addtabs", function(){});
|
||||||
$(window).on('scroll.SelectPage', function (e) {
|
$(window).on('scroll.SelectPage', function (e) {
|
||||||
$('div.' + css.container + '.' + css.container_open).each(function () {
|
$('div.' + css.container + '.' + css.container_open).each(function () {
|
||||||
var $this = $(this), d = $this.find('input.' + css.input).data(SelectPage.dataKey),
|
var $this = $(this), d = $this.find('input.' + css.input).data(SelectPage.dataKey),
|
||||||
offset = d.elem.result_area.offset(),
|
offset = d.elem.result_area.offset(),
|
||||||
screenScrollTop = $(window).scrollTop(),
|
screenScrollTop = $(window).scrollTop(),
|
||||||
docHeight = $(document).height(),
|
docHeight = $(document).height(),
|
||||||
viewHeight = $(window).height(),
|
viewHeight = $(window).height(),
|
||||||
listHeight = d.elem.result_area.outerHeight(),
|
listHeight = d.elem.result_area.outerHeight(),
|
||||||
listBottom = offset.top + listHeight,
|
listBottom = offset.top + listHeight,
|
||||||
hasOverflow = docHeight > viewHeight,
|
hasOverflow = docHeight > viewHeight,
|
||||||
down = d.elem.result_area.hasClass('shadowDown');
|
down = d.elem.result_area.hasClass('shadowDown');
|
||||||
if (hasOverflow) {
|
if (hasOverflow) {
|
||||||
if (down) {//open down
|
if (down) {//open down
|
||||||
if (listBottom > (viewHeight + screenScrollTop))
|
if (listBottom > (viewHeight + screenScrollTop))
|
||||||
|
|
@ -12312,15 +12331,15 @@ define("addtabs", function(){});
|
||||||
*/
|
*/
|
||||||
SelectPage.prototype.scrollWindow = function (self, enforce) {
|
SelectPage.prototype.scrollWindow = function (self, enforce) {
|
||||||
var current_result = self.getCurrentLine(self),
|
var current_result = self.getCurrentLine(self),
|
||||||
target_top = (current_result && !enforce) ? current_result.offset().top : self.elem.container.offset().top,
|
target_top = (current_result && !enforce) ? current_result.offset().top : self.elem.container.offset().top,
|
||||||
target_size;
|
target_size;
|
||||||
|
|
||||||
self.prop.size_li = self.elem.results.children('li:first').outerHeight();
|
self.prop.size_li = self.elem.results.children('li:first').outerHeight();
|
||||||
target_size = self.prop.size_li;
|
target_size = self.prop.size_li;
|
||||||
|
|
||||||
var gap, client_height = $(window).height(),
|
var gap, client_height = $(window).height(),
|
||||||
scroll_top = $(window).scrollTop(),
|
scroll_top = $(window).scrollTop(),
|
||||||
scroll_bottom = scroll_top + client_height - target_size;
|
scroll_bottom = scroll_top + client_height - target_size;
|
||||||
if (current_result.length) {
|
if (current_result.length) {
|
||||||
if (target_top < scroll_top || target_size > client_height) {
|
if (target_top < scroll_top || target_size > client_height) {
|
||||||
//scroll to top
|
//scroll to top
|
||||||
|
|
@ -12419,7 +12438,7 @@ define("addtabs", function(){});
|
||||||
*/
|
*/
|
||||||
SelectPage.prototype.processControl = function (self, e) {
|
SelectPage.prototype.processControl = function (self, e) {
|
||||||
if (($.inArray(e.keyCode, [37, 38, 39, 40, 27, 9]) > -1 && self.elem.result_area.is(':visible')) ||
|
if (($.inArray(e.keyCode, [37, 38, 39, 40, 27, 9]) > -1 && self.elem.result_area.is(':visible')) ||
|
||||||
($.inArray(e.keyCode, [13, 9]) > -1 && self.getCurrentLine(self))) {
|
($.inArray(e.keyCode, [13, 9]) > -1 && self.getCurrentLine(self))) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.cancelBubble = true;
|
e.cancelBubble = true;
|
||||||
|
|
@ -12543,14 +12562,15 @@ define("addtabs", function(){});
|
||||||
};
|
};
|
||||||
_orgParams[searchKey] = q_word[0];
|
_orgParams[searchKey] = q_word[0];
|
||||||
if (_paramsFunc) {
|
if (_paramsFunc) {
|
||||||
var result = $.isFunction(_paramsFunc) ? _paramsFunc() : _paramsFunc;
|
var result = $.isFunction(_paramsFunc) ? _paramsFunc(self) : _paramsFunc;
|
||||||
if (result && $.isPlainObject(result)) {
|
if (result && $.isPlainObject(result)) {
|
||||||
_params = $.extend({}, _orgParams, result);
|
_params = $.extend({}, _orgParams, result);
|
||||||
} else {
|
} else {
|
||||||
_params = _orgParams;
|
_params = _orgParams;
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
_params = _orgParams;
|
_params = _orgParams;
|
||||||
|
}
|
||||||
self.prop.xhr = $.ajax({
|
self.prop.xhr = $.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: p.data,
|
url: p.data,
|
||||||
|
|
@ -12571,10 +12591,10 @@ define("addtabs", function(){});
|
||||||
self.showMessage(self, self.message.ajax_error);
|
self.showMessage(self, self.message.ajax_error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(self.elem.navi) {
|
if (self.elem.navi) {
|
||||||
$(self.elem.navi).toggleClass("hide", json.cnt_whole <= json.originalResult.length);
|
$(self.elem.navi).toggleClass("hide", json.cnt_whole <= json.originalResult.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
json.candidate = [];
|
json.candidate = [];
|
||||||
json.keyField = [];
|
json.keyField = [];
|
||||||
if (typeof json.originalResult != 'object') {
|
if (typeof json.originalResult != 'object') {
|
||||||
|
|
@ -12648,8 +12668,8 @@ define("addtabs", function(){});
|
||||||
|
|
||||||
// (CASE WHEN ...) then く order some column
|
// (CASE WHEN ...) then く order some column
|
||||||
var reg1 = new RegExp('^' + esc_q[0] + '$', 'gi'),
|
var reg1 = new RegExp('^' + esc_q[0] + '$', 'gi'),
|
||||||
reg2 = new RegExp('^' + esc_q[0], 'gi'),
|
reg2 = new RegExp('^' + esc_q[0], 'gi'),
|
||||||
matched1 = [], matched2 = [], matched3 = [];
|
matched1 = [], matched2 = [], matched3 = [];
|
||||||
for (i = 0; i < matched.length; i++) {
|
for (i = 0; i < matched.length; i++) {
|
||||||
var orderField = p.orderBy[0][0];
|
var orderField = p.orderBy[0][0];
|
||||||
var orderValue = String(matched[i][orderField]);
|
var orderValue = String(matched[i][orderField]);
|
||||||
|
|
@ -12818,9 +12838,9 @@ define("addtabs", function(){});
|
||||||
if (pagebar.find('li').size() === 0) {
|
if (pagebar.find('li').size() === 0) {
|
||||||
pagebar.hide().empty();
|
pagebar.hide().empty();
|
||||||
var iconFist = 'spfont sp-first',
|
var iconFist = 'spfont sp-first',
|
||||||
iconPrev = 'spfont sp-previous',
|
iconPrev = 'spfont sp-previous',
|
||||||
iconNext = 'spfont sp-next',
|
iconNext = 'spfont sp-next',
|
||||||
iconLast = 'spfont sp-last';
|
iconLast = 'spfont sp-last';
|
||||||
|
|
||||||
pagebar.append('<li class="csFirstPage" title="' + msg.first_title + '" ><a href="javascript:void(0);"> <i class="' + iconFist + '"></i> </a></li>');
|
pagebar.append('<li class="csFirstPage" title="' + msg.first_title + '" ><a href="javascript:void(0);"> <i class="' + iconFist + '"></i> </a></li>');
|
||||||
pagebar.append('<li class="csPreviousPage" title="' + msg.prev_title + '" ><a href="javascript:void(0);"><i class="' + iconPrev + '"></i></a></li>');
|
pagebar.append('<li class="csPreviousPage" title="' + msg.prev_title + '" ><a href="javascript:void(0);"><i class="' + iconPrev + '"></i></a></li>');
|
||||||
|
|
@ -12836,7 +12856,7 @@ define("addtabs", function(){});
|
||||||
};
|
};
|
||||||
|
|
||||||
var pagebar = self.elem.navi.find('ul'),
|
var pagebar = self.elem.navi.find('ul'),
|
||||||
last_page = Math.ceil(cnt_whole / self.option.pageSize); //calculate total page
|
last_page = Math.ceil(cnt_whole / self.option.pageSize); //calculate total page
|
||||||
if (last_page === 0)
|
if (last_page === 0)
|
||||||
page_num = 0;
|
page_num = 0;
|
||||||
else {
|
else {
|
||||||
|
|
@ -12851,10 +12871,10 @@ define("addtabs", function(){});
|
||||||
|
|
||||||
//update paging status
|
//update paging status
|
||||||
var dClass = 'disabled',
|
var dClass = 'disabled',
|
||||||
first = pagebar.find('li.csFirstPage'),
|
first = pagebar.find('li.csFirstPage'),
|
||||||
previous = pagebar.find('li.csPreviousPage'),
|
previous = pagebar.find('li.csPreviousPage'),
|
||||||
next = pagebar.find('li.csNextPage'),
|
next = pagebar.find('li.csNextPage'),
|
||||||
last = pagebar.find('li.csLastPage');
|
last = pagebar.find('li.csLastPage');
|
||||||
//first and previous
|
//first and previous
|
||||||
if (page_num === 1 || page_num === 0) {
|
if (page_num === 1 || page_num === 0) {
|
||||||
if (!first.hasClass(dClass))
|
if (!first.hasClass(dClass))
|
||||||
|
|
@ -12904,10 +12924,10 @@ define("addtabs", function(){});
|
||||||
|
|
||||||
if (json.candidate.length) {
|
if (json.candidate.length) {
|
||||||
var arr_candidate = json.candidate,
|
var arr_candidate = json.candidate,
|
||||||
arr_primary_key = json.keyField,
|
arr_primary_key = json.keyField,
|
||||||
keystr = el.hidden.val(),
|
keystr = el.hidden.val(),
|
||||||
keyArr = keystr ? keystr.split(',') : new Array(),
|
keyArr = keystr ? keystr.split(',') : new Array(),
|
||||||
itemText = '';
|
itemText = '';
|
||||||
for (var i = 0; i < arr_candidate.length; i++) {
|
for (var i = 0; i < arr_candidate.length; i++) {
|
||||||
if (p.formatItem && $.isFunction(p.formatItem)) {
|
if (p.formatItem && $.isFunction(p.formatItem)) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -12934,7 +12954,7 @@ define("addtabs", function(){});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var li = '<li class="' + self.css_class.message_box + '"><i class="spfont sp-warning"></i> ' +
|
var li = '<li class="' + self.css_class.message_box + '"><i class="spfont sp-warning"></i> ' +
|
||||||
self.message.not_found + '</li>';
|
self.message.not_found + '</li>';
|
||||||
el.results.append(li);
|
el.results.append(li);
|
||||||
}
|
}
|
||||||
el.results.show();
|
el.results.show();
|
||||||
|
|
@ -12972,7 +12992,7 @@ define("addtabs", function(){});
|
||||||
} else {
|
} else {
|
||||||
if (!p.pagination) {
|
if (!p.pagination) {
|
||||||
var itemHeight = el.results.find('li:first').outerHeight(true),
|
var itemHeight = el.results.find('li:first').outerHeight(true),
|
||||||
listHeight = itemHeight * p.listSize;
|
listHeight = itemHeight * p.listSize;
|
||||||
el.results.css({
|
el.results.css({
|
||||||
'max-height': listHeight,
|
'max-height': listHeight,
|
||||||
'overflow-y': 'auto'
|
'overflow-y': 'auto'
|
||||||
|
|
@ -12981,30 +13001,30 @@ define("addtabs", function(){});
|
||||||
|
|
||||||
//handle result list show up side(left, right, up or down)
|
//handle result list show up side(left, right, up or down)
|
||||||
var docWidth = $(document).width(),
|
var docWidth = $(document).width(),
|
||||||
docHeight = $(document).height(), //the document full height
|
docHeight = $(document).height(), //the document full height
|
||||||
viewHeight = $(window).height(), //browser visible area height
|
viewHeight = $(window).height(), //browser visible area height
|
||||||
offset = el.container.offset(),
|
offset = el.container.offset(),
|
||||||
screenScrollTop = $(window).scrollTop(),
|
screenScrollTop = $(window).scrollTop(),
|
||||||
listWidth = el.result_area.outerWidth(),
|
listWidth = el.result_area.outerWidth(),
|
||||||
//result list height
|
//result list height
|
||||||
listHeight = el.result_area.outerHeight(),
|
listHeight = el.result_area.outerHeight(),
|
||||||
//default left used input element left
|
//default left used input element left
|
||||||
defaultLeft = offset.left, //p.multiple ? -1 : 0;
|
defaultLeft = offset.left, //p.multiple ? -1 : 0;
|
||||||
//input element height
|
//input element height
|
||||||
inputHeight = el.container.outerHeight(),
|
inputHeight = el.container.outerHeight(),
|
||||||
left = (offset.left + listWidth) > docWidth ?
|
left = (offset.left + listWidth) > docWidth ?
|
||||||
defaultLeft - (listWidth - el.container.outerWidth()) :
|
defaultLeft - (listWidth - el.container.outerWidth()) :
|
||||||
defaultLeft,
|
defaultLeft,
|
||||||
//the actual top coordinate of input element(outer div)
|
//the actual top coordinate of input element(outer div)
|
||||||
screenTop = offset.top, //$(el.container).scrollTop();//offset.top - screenScrollTop;
|
screenTop = offset.top, //$(el.container).scrollTop();//offset.top - screenScrollTop;
|
||||||
top = 0, dist = 5, //set distance between input element and result list
|
top = 0, dist = 5, //set distance between input element and result list
|
||||||
//the actual top coordinate of result list
|
//the actual top coordinate of result list
|
||||||
listBottom = screenTop + inputHeight + listHeight + dist,
|
listBottom = screenTop + inputHeight + listHeight + dist,
|
||||||
hasOverflow = docHeight > viewHeight;
|
hasOverflow = docHeight > viewHeight;
|
||||||
|
|
||||||
if ((screenTop - screenScrollTop - dist > listHeight) &&
|
if ((screenTop - screenScrollTop - dist > listHeight) &&
|
||||||
(hasOverflow && listBottom > (viewHeight + screenScrollTop)) ||
|
(hasOverflow && listBottom > (viewHeight + screenScrollTop)) ||
|
||||||
(!hasOverflow && listBottom > viewHeight)) {
|
(!hasOverflow && listBottom > viewHeight)) {
|
||||||
//open up
|
//open up
|
||||||
top = offset.top - listHeight - dist;
|
top = offset.top - listHeight - dist;
|
||||||
el.result_area.removeClass('shadowUp shadowDown').addClass('shadowUp');
|
el.result_area.removeClass('shadowUp shadowDown').addClass('shadowUp');
|
||||||
|
|
@ -13205,8 +13225,8 @@ define("addtabs", function(){});
|
||||||
jsonarr.push($row.data('dataObj'));
|
jsonarr.push($row.data('dataObj'));
|
||||||
//limited max selected items
|
//limited max selected items
|
||||||
if ($.type(p.maxSelectLimit) === 'number' &&
|
if ($.type(p.maxSelectLimit) === 'number' &&
|
||||||
p.maxSelectLimit > 0 &&
|
p.maxSelectLimit > 0 &&
|
||||||
p.maxSelectLimit === self.elem.element_box.find('li.selected_tag').size()) {
|
p.maxSelectLimit === self.elem.element_box.find('li.selected_tag').size()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -13319,7 +13339,7 @@ define("addtabs", function(){});
|
||||||
var keys = self.elem.hidden.val();
|
var keys = self.elem.hidden.val();
|
||||||
if ($.type(key) != 'undefined' && keys) {
|
if ($.type(key) != 'undefined' && keys) {
|
||||||
var keyarr = keys.split(','),
|
var keyarr = keys.split(','),
|
||||||
index = $.inArray(key.toString(), keyarr);
|
index = $.inArray(key.toString(), keyarr);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
keyarr.splice(index, 1);
|
keyarr.splice(index, 1);
|
||||||
self.elem.hidden.val(keyarr.toString());
|
self.elem.hidden.val(keyarr.toString());
|
||||||
|
|
@ -13358,11 +13378,11 @@ define("addtabs", function(){});
|
||||||
if (!self.option.multiple)
|
if (!self.option.multiple)
|
||||||
return;
|
return;
|
||||||
var width = '',
|
var width = '',
|
||||||
inputLi = self.elem.combo_input.closest('li');
|
inputLi = self.elem.combo_input.closest('li');
|
||||||
var setDefaultSize = function (self, inputLi) {
|
var setDefaultSize = function (self, inputLi) {
|
||||||
inputLi.removeClass('full_width');
|
inputLi.removeClass('full_width');
|
||||||
var minimumWidth = self.elem.combo_input.val().length + 1,
|
var minimumWidth = self.elem.combo_input.val().length + 1,
|
||||||
width = (minimumWidth * 0.75) + 'em';
|
width = (minimumWidth * 0.75) + 'em';
|
||||||
self.elem.combo_input.css('width', width).removeAttr('placeholder');
|
self.elem.combo_input.css('width', width).removeAttr('placeholder');
|
||||||
};
|
};
|
||||||
if (self.elem.element_box.find('li.selected_tag').size() === 0) {
|
if (self.elem.element_box.find('li.selected_tag').size() === 0) {
|
||||||
|
|
@ -13429,8 +13449,8 @@ define("addtabs", function(){});
|
||||||
function Plugin(option) {
|
function Plugin(option) {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this),
|
var $this = $(this),
|
||||||
data = $this.data(SelectPage.dataKey),
|
data = $this.data(SelectPage.dataKey),
|
||||||
params = $.extend({}, defaults, $this.data(), data && data.option, typeof option === 'object' && option);
|
params = $.extend({}, defaults, $this.data(), data && data.option, typeof option === 'object' && option);
|
||||||
if (!data)
|
if (!data)
|
||||||
$this.data(SelectPage.dataKey, (data = new SelectPage(this, params)));
|
$this.data(SelectPage.dataKey, (data = new SelectPage(this, params)));
|
||||||
});
|
});
|
||||||
|
|
@ -13438,8 +13458,8 @@ define("addtabs", function(){});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get plugin object
|
* Get plugin object
|
||||||
* @param {object} obj
|
* @param {object} obj
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function getPlugin(obj) {
|
function getPlugin(obj) {
|
||||||
return $(obj).closest('div.sp_container').find('input.sp_input');
|
return $(obj).closest('div.sp_container').find('input.sp_input');
|
||||||
|
|
@ -13451,7 +13471,7 @@ define("addtabs", function(){});
|
||||||
function ClearSelected() {
|
function ClearSelected() {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = getPlugin(this),
|
var $this = getPlugin(this),
|
||||||
data = $this.data(SelectPage.dataKey);
|
data = $this.data(SelectPage.dataKey);
|
||||||
if (data) {
|
if (data) {
|
||||||
data.prop.init_set = true;
|
data.prop.init_set = true;
|
||||||
data.clearAll(data);
|
data.clearAll(data);
|
||||||
|
|
@ -13469,7 +13489,7 @@ define("addtabs", function(){});
|
||||||
function SelectedRefresh() {
|
function SelectedRefresh() {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = getPlugin(this),
|
var $this = getPlugin(this),
|
||||||
data = $this.data(SelectPage.dataKey);
|
data = $this.data(SelectPage.dataKey);
|
||||||
if (data && data.elem.hidden.val())
|
if (data && data.elem.hidden.val())
|
||||||
data.setInitRecord(true);
|
data.setInitRecord(true);
|
||||||
});
|
});
|
||||||
|
|
@ -13485,7 +13505,7 @@ define("addtabs", function(){});
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
if (data && $.isArray(data)) {
|
if (data && $.isArray(data)) {
|
||||||
var $this = getPlugin(this),
|
var $this = getPlugin(this),
|
||||||
plugin = $this.data(SelectPage.dataKey);
|
plugin = $this.data(SelectPage.dataKey);
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
plugin.clearAll(plugin);
|
plugin.clearAll(plugin);
|
||||||
plugin.option.data = data;
|
plugin.option.data = data;
|
||||||
|
|
@ -13502,7 +13522,7 @@ define("addtabs", function(){});
|
||||||
var status = false;
|
var status = false;
|
||||||
this.each(function () {
|
this.each(function () {
|
||||||
var $this = getPlugin(this),
|
var $this = getPlugin(this),
|
||||||
plugin = $this.data(SelectPage.dataKey);
|
plugin = $this.data(SelectPage.dataKey);
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
if ($.type(disabled) !== 'undefined')
|
if ($.type(disabled) !== 'undefined')
|
||||||
plugin.disabled(plugin, disabled);
|
plugin.disabled(plugin, disabled);
|
||||||
|
|
@ -13553,6 +13573,5 @@ define("addtabs", function(){});
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
})(window.jQuery);
|
})(window.jQuery);
|
||||||
|
|
||||||
define("selectpage", function(){});
|
define("selectpage", function(){});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -431,7 +431,7 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U
|
||||||
complete: function (xhr) {
|
complete: function (xhr) {
|
||||||
var token = xhr.getResponseHeader('__token__');
|
var token = xhr.getResponseHeader('__token__');
|
||||||
if (token) {
|
if (token) {
|
||||||
$("input[name='__token__']", form).val(token);
|
$("input[name='__token__']").val(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, function (data, ret) {
|
}, function (data, ret) {
|
||||||
|
|
@ -439,7 +439,7 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U
|
||||||
if (data && typeof data === 'object') {
|
if (data && typeof data === 'object') {
|
||||||
//刷新客户端token
|
//刷新客户端token
|
||||||
if (typeof data.token !== 'undefined') {
|
if (typeof data.token !== 'undefined') {
|
||||||
$("input[name='__token__']", form).val(data.token);
|
$("input[name='__token__']").val(data.token);
|
||||||
}
|
}
|
||||||
//调用客户端事件
|
//调用客户端事件
|
||||||
if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
|
if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
|
||||||
|
|
@ -453,7 +453,7 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U
|
||||||
}
|
}
|
||||||
}, function (data, ret) {
|
}, function (data, ret) {
|
||||||
if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
|
if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
|
||||||
$("input[name='__token__']", form).val(data.token);
|
$("input[name='__token__']").val(data.token);
|
||||||
}
|
}
|
||||||
if (typeof error === 'function') {
|
if (typeof error === 'function') {
|
||||||
if (false === error.call(form, data, ret)) {
|
if (false === error.call(form, data, ret)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue