后台管理页面搜索细节调整

pull/41/head
devlike 2018-02-08 18:44:11 +08:00
parent 91f5dcf7f6
commit 34cdae7a3c
12 changed files with 149 additions and 89 deletions

View File

@ -50,34 +50,36 @@ class Archives extends Backend
/**
* 读取栏目列表
*/
private function initForm()
private function initForm($siteId=null)
{
//从总后台进入
if ($this->auth->isSuperAdmin()){
$where=$first_siteid='';
if ($this->auth->isSuperAdmin()) {
$sitelist = model('Sites')->all();
$this->view->assign('siteList', $sitelist);
$first_siteid = $sitelist?$sitelist[0]['id']:null;
//记住下拉列表中第一个网站的ID添加文章时只读取对应的栏目等信息
if ($sitelist && $this->request->action()=='add') {
$first_siteid = $sitelist[0]['id'];
$where = ['site_id' => $first_siteid];
}
}
//从站点后台进入
else {
$this->view->assign('siteList', null);
$first_siteid = Session::get('user_site_id');
}
if (!is_null($siteId)) $first_siteid=$siteId;
$tree = Tree::instance();
$tree->init(model('channel')->with('sites')->order('site_id asc,weigh desc,id desc')->select(), 'pid');
$tree->init(model('channel')->with('sites')->where($where)->order('site_id asc,weigh desc,id desc')->select(), 'pid');
$this->channellist = $tree->getTreeList($tree->getTreeArray(0), 'name');
$channeldata = []; //0 => ['mode' => 'default','site_id'=>0, 'name' => __('None')]];
foreach ($this->channellist as $k => $v)
{
if(isset($first_siteid) && !is_null($first_siteid) && $v['site_id']!=$first_siteid) {
//do nothing
}else {
$channeldata[$v['id']] = $v;
$channeldata[$v['id']]['disabled'] = 0;
$channeldata[$v['id']]['sitename'] = $v['sites']['name'] == '' ? __('Main site') : $v['sites']['name'];
if ($v['type'] != 'list') {
$channeldata[$v['id']]['disabled'] = 1;
}
$channeldata[$v['id']] = $v;
$channeldata[$v['id']]['disabled'] = 0;
$channeldata[$v['id']]['sitename'] = $v['sites']['name'] == '' ? __('Main site') : $v['sites']['name'];
if ($v['type'] != 'list') {
$channeldata[$v['id']]['disabled'] = 1;
}
}
$this->view->assign("channelList", $channeldata);
@ -113,7 +115,7 @@ class Archives extends Backend
->where($where)
//->where('site_id', Session::get('admin.siteid'))
->where('isDelete',0)
->with('channel')
->with('sites,channel')
->field('subtitle,content',true, $tablename)
->order($sort, $order)
->limit($offset, $limit)
@ -124,6 +126,7 @@ class Archives extends Backend
return json($result);
}
$this->initForm();
$this->assignconfig('show_sitename', $this->auth->isSuperAdmin());
return $this->view->fetch();
}
@ -266,7 +269,7 @@ class Archives extends Backend
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->initForm();
$this->initForm($row->site_id);
$channeldata = []; //0 => ['mode' => 'default','site_id'=>0, 'name' => __('None')]];
foreach ($this->channellist as $k => $v)
{

View File

@ -19,7 +19,6 @@ class Channel extends Backend
{
protected $model = null;
protected $channellist = [];
protected $noNeedRight = ['check_element_available','getlist'];
@ -29,29 +28,33 @@ class Channel extends Backend
$this->request->filter(['strip_tags']);
$this->model = model('Channel');
$tree = Tree::instance();
$tree->init($this->model->order('weigh desc,id desc')->with('Sites')->with('archives')->select(), 'pid');
$this->channellist = $tree->getTreeList($tree->getTreeArray(0), 'name');
}
private function initForm(){
//从总后台进入
private function initForm($siteId=null)
{
$first_siteid=null;
if ($this->auth->isSuperAdmin()){
$sitelist = Sites::all();
$this->view->assign('siteList', $sitelist);
$first_siteid = $sitelist?$sitelist[0]['id']:null;
if ($sitelist && $this->request->action()=='add') {
$first_siteid = $sitelist[0]['id'] ;
}
}
//从站点后台进入
else {
$this->view->assign('siteList', null);
$first_siteid = Session::get('user_site_id');
}
if (!is_null($siteId)) $first_siteid=$siteId;
$where = ['site_id'=>$first_siteid];
$tree = Tree::instance();
$tree->init($this->model->order('weigh desc,id desc')->where($where)->with('Sites,archives')->select(), 'pid');
$channellist = $tree->getTreeList($tree->getTreeArray(0), 'name');
$channeldata = [0 => ['site_id'=>0, 'name' => __('None')]];
foreach ($this->channellist as $k => $v)
foreach ($channellist as $k => $v)
{
if(isset($first_siteid) && !is_null($first_siteid) && $v['site_id']!=$first_siteid) {
//添加&编辑页面, 排除非首选网站的栏目
if(!is_null($first_siteid) && $v['site_id']!=$first_siteid) {
//do nothing
}else {
$channeldata[$v['id']] = $v;
@ -76,7 +79,7 @@ class Channel extends Backend
$this->view->assign("typeList", $this->model->getTypeList());
$this->view->assign("modelList", model('PostsModelx')->all());
$ml = Seven::build_langs('row[lang]',null,['siteid'=>Session::get("admin.siteid")]);
$ml = Seven::build_langs('row[lang]',null,['siteid'=>$first_siteid]);
$this->view->assign('multilanguage',$ml);
}
@ -90,10 +93,18 @@ class Channel extends Backend
{
$search = $this->request->request("search");
//构造父类select列表选项数据
list($where, $sort, $order, $offset, $limit) = $this->buildparams(false, true);
$tree = Tree::instance();
$tree->init($this->model->order('weigh desc,id desc')->where($where)->with('Sites,archives')->select(), 'pid');
$channellist = $tree->getTreeList($tree->getTreeArray(0), 'name');
$list = [];
if ($search)
{
foreach ($this->channellist as $k => $v)
foreach ($channellist as $k => $v)
{
if (stripos($v['name'], $search) !== false || stripos($v['nickname'], $search) !== false)
{
@ -103,13 +114,18 @@ class Channel extends Backend
}
else
{
$list = $this->channellist;
$list = $channellist;
}
$total = count($list);
$result = array("total" => $total, "rows" => $list);
return json($result);
}
if ($this->auth->isSuperAdmin()){
$sitelist = Sites::all();
$this->view->assign('siteList', $sitelist);
}
$this->assignconfig('show_sitename', $this->auth->isSuperAdmin());
return $this->view->fetch();
}
@ -177,7 +193,7 @@ class Channel extends Backend
}
$this->error(__('Parameter %s can not be empty', ''));
}
$this->initForm();
$this->initForm($row->site_id);
$this->view->assign('multilanguage', Seven::build_langs('row[lang]',$row['lang'],['siteid'=>$row->site_id]));
$this->view->assign("row", $row);
return $this->view->fetch();
@ -186,12 +202,15 @@ class Channel extends Backend
/**
* 返回栏目列表,Ajax调用
* 返回栏目列表,文章列表搜索框Ajax调用
*/
public function getlist()
{
if($this->request->isAjax()){
foreach ($this->channellist as $k => $v){
$tree = Tree::instance();
$channellist=$tree->init($this->model->order('weigh desc,id desc')->with('Sites,archives')->select(), 'pid');
$channellist = $tree->getTreeList($tree->getTreeArray(0), 'name');
foreach ($channellist as $k => $v){
$list[$v['id']]=$v['name'];
}
return json($list);

View File

@ -59,6 +59,7 @@ class Page extends Backend
return json($result);
}
$this->assignconfig('show_sitename', $this->auth->isSuperAdmin());
return $this->view->fetch();
}
@ -68,13 +69,12 @@ class Page extends Backend
*/
private function initForm()
{
//从总后台进入
$first_siteid=null;
if ($this->auth->isSuperAdmin()){
$sitelist = Sites::all();
$this->view->assign('siteList', $sitelist);
$first_siteid = $sitelist?$sitelist[0]['id']:null;
$first_siteid=$sitelist?$sitelist[0]['id']:$first_siteid;
}
//从站点后台进入
else {
$this->view->assign('siteList', null);
$first_siteid = \think\Session::get('user_site_id');
@ -149,7 +149,7 @@ class Page extends Backend
}
$this->view->assign("row", $row);
$this->initForm();
$this->view->assign('multilanguage', Seven::build_langs('row[lang]',$row['lang']));
$this->view->assign('multilanguage', Seven::build_langs('row[lang]',$row['lang'],['siteid'=>$row->site_id]));
return $this->view->fetch();
}

View File

@ -11,8 +11,8 @@
<div class="dropdown btn-group {:$auth->check('posts/archives/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="post_status=pass"><i class="fa fa-check-circle"></i> {:__('Set Passed')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="post_status=fail"><i class="fa fa-times-circle"></i> {:__('Set Unpassed')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
<a href="{:url('posts/archives/recyclebin')}" class="btn btn-danger btn-draft btn-dialog" title="{:__('Recyclebin')}"><i class="fa fa-recycle"></i> {:__('Recyclebin')}</a>

View File

@ -57,7 +57,7 @@
<div class="form-group">
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-pid" data-rule="required" class="form-control selectpicker" data-live-search="true" name="row[pid]">
<select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
{foreach name="parentList" item="vo"}
<option data-siteid="{$vo.site_id}" value="{$key}" {in name="key" value=""}selected{/in}>{$vo.name}</option>
{/foreach}

View File

@ -36,7 +36,7 @@
<div class="control-radio col-xs-12 col-sm-8">
<div class="radio">
{foreach name="modelList" item="vo"}
<label for="c-model_{$vo['name']}"><input type="radio" name="row[model]" id="c-model_{$vo['name']}" value="{$vo['name']}" {in name="$vo['name']" value="$row.model"}checked{/in}>{$vo['title']}</label>
<label for="c-model_{$vo['name']}"><input type="radio" name="row[model]" id="c-model_{$vo['name']}" value="{$vo['name']}" {eq name="$vo['name']" value="$row['model']"}checked{/eq}>{$vo['title']}</label>
<span></span>
{/foreach}
</div>
@ -48,7 +48,7 @@
<div class="col-xs-12 col-sm-8">
<select id="c-site_id" data-rule="required" class="form-control selectpicker" name="row[site_id]">
{foreach name="siteList" item="vo"}
<option value="{$vo.id}" {in name="key" value="{$vo['id']}"}selected{/eq}>{$vo.name} ({$vo.domain})</option>
<option value="{$vo.id}" {eq name="$vo.id" value="$row['site_id']"}selected{/eq}>{$vo.name} ({$vo.domain})</option>
{/foreach}
</select>
</div>
@ -58,9 +58,9 @@
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-pid" data-rule="required" class="form-control selectpicker" data-live-search="true" name="row[pid]">
<select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
{foreach name="parentList" item="vo"}
<option data-siteid="{$vo.site_id}" class="{:$vo.site_id==$row.site_id?'':'hide'}" value="{$key}" {in name="key" value="$row.pid"}selected{/in}>{$vo.name}</option>
<option data-siteid="{$vo.site_id}" value="{$key}" {eq name="$key" value="$row['pid']"}selected{/eq}>{$vo.name}</option>
{/foreach}
</select>

View File

@ -14,6 +14,16 @@
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>
{notempty name="siteList"}
<div class="btn-group" id="formg">
<select id="c-site_id" class="selectpicker" data-live-search="true" name="site_id">
<option value="0">{:__('Filter by site')}</option>
{foreach name="siteList" item="vo"}
<option value="{$vo.id}">{$vo.name} ({$vo.domain})</option>
{/foreach}
</select>
</div>
{/notempty}
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-edit="{:$auth->check('posts/channel/edit')}"

View File

@ -1,17 +1,4 @@
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
{notempty name="siteList"}
<div class="form-group">
<label for="c-site_id" class="control-label col-xs-12 col-sm-2">{:__('Site_id')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-site_id" class="form-control selectpicker" name="row[site_id]">
{foreach name="siteList" item="vo"}
<option data-lang="{$vo.lang}" value="{$vo.id}">{$vo.name} ({$vo.domain})</option>
{/foreach}
</select>
</div>
</div>
{/notempty}
<div class="form-group">
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">

View File

@ -38,19 +38,24 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
[
{checkbox: true},
{field: 'id', title: __('id'), operate: false},
{field: 'channel_id', title: __('Channel_id'),formatter: function (value, row, index) {
{field: 'site_id', title: __('Site_id'), visible:Config.show_sitename,
formatter: function (value, row, index) {
return row.sites==null?'':'<a href="javascript:;" class="searchit" data-field="site_id" data-value="' + row.site_id + '">' + row.sites.name + '</a>';
}
},
{field: 'channel_id', title: __('Channel_id'),searchList: $.getJSON('posts/channel/getlist'),
formatter: function (value, row, index) {
return row.channel==null?'':'<a href="javascript:;" class="searchit" data-field="channel_id" data-value="' + value + '">' + row.channel.name + '</a>';
},
searchList: $.getJSON('posts/channel/getlist')
}
},
{field: 'type', title: __('type'), formatter: function (value,row,index){
return '<span class="label label-info">'+value+'</span>';
}, operate:false },
{field: 'title', align:'left', title: __('title'), operate: 'LIKE %...%',
{field: 'title', align:'left', title: __('title'), operate: 'LIKE %...%',placeholder: '关键字,模糊搜索',
formatter: function(value,row, index){
return value + (row.cover==''?'' : ' <span><i class="fa fa-file-image-o text-danger"></i></span>');
}},
{field: 'status', title: __('status'), searchList: {new: __('New'), normal: __('Normal'), hidden: __('Hidden')}, formatter: Table.api.formatter.status},
{field: 'status', title: __('status'), searchList: {normal: __('Normal'), hidden: __('Hidden')}, formatter: Table.api.formatter.status},
{field: 'updatetime', title: __('updatetime'),operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'views', title: __('Views'), operate:false},
{field: 'weigh', title: __('Weigh'), operate:false},

View File

@ -24,29 +24,59 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
sortName: 'weigh',
pagination: false,
escape: false,
commonSearch: false,
commonSearch: true,
search: false,
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'sites.name', title: __('Site_id')},
{field: 'type', title: __('Type'), custom: {channel: 'info', list: 'success', redirect: 'primary'}, formatter: Table.api.formatter.flag},
{field: 'name', title: __('Name'), align: 'left', formatter: Controller.api.formatter.catename},
{field: 'diyname', title: __('Redirect'), formatter:function(value,row,index){
return value==''? '' : '<a href="' + value + '" title="'+value+'" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a>';
}},
{field: 'id', title: __('Id'),operate:false},
{field: 'site_id', title: __('Site_id'), visible:Config.show_sitename,
formatter: function (value, row, index) {
return row.sites==null?'':'<a href="javascript:;" class="searchit" data-field="site_id" data-value="' + row.site_id + '">' + row.sites.name + '</a>';
}
},
{field: 'type', title: __('Type'), searchList: {channel: __('Channel'), list: __('list'), redirect: __('Redirect')},custom: {channel: 'info', list: 'success', redirect: 'primary'}, formatter: Table.api.formatter.flag},
{field: 'name', title: __('Name'), align: 'left', operate: 'LIKE %...%',placeholder: '关键字,模糊搜索', formatter: Controller.api.formatter.catename},
{field: 'diyname', title: __('Redirect'), operate:false,
formatter:function(value,row,index){
diyname = row['type']=='redirect' ? row['redirect'] : value==''? '': '/list/'+value+'.html';
return diyname==''? '' : '<a href="' + diyname + '" title="'+diyname+'" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a>';
}
},
{field: 'flag', title: __('Flag'), operate: false, formatter: Table.api.formatter.flag},
{field: 'weigh', title: __('Weigh'), visible:true},
{field: 'archives.items', title: __('Items'), formatter:function(value,row,index){return (typeof value === 'number') ? value : 0;}},
{field: 'status', title: __('Status'), operate: false, formatter: Table.api.formatter.status},
{field: 'weigh', title: __('Weigh'), visible:true,operate:false},
{field: 'archives.items', title: __('Items'),operate:false,
formatter:function(value,row,index){
return (typeof value === 'number') ? '<span class="label label-info">'+ value +'</span>' : 0;
}},
{field: 'status', title: __('Status'), searchList: {normal: __('Normal'), hidden: __('Hidden')}, formatter: Table.api.formatter.status},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
$(document).on('change','#c-site_id', function(){
var self = this;
if($(self).val()==0) return false;
var options = table.bootstrapTable('getOptions');
options.pageNumber = 1;
options.queryParams = function (params) {
return {
sort: params.sort,
order: params.order,
filter: JSON.stringify({site_id: $(self).val()}),
op: JSON.stringify({site_id: '='}),
offset: params.offset,
limit: params.limit,
};
};
//Toastr.info("数据加载中,请稍候...");
table.bootstrapTable('refresh');
});
// 为表格绑定事件
Table.api.bindevent(table);
Form.api.bindevent($("#formg"));
},
add: function () {
Controller.api.bindevent();

View File

@ -24,15 +24,21 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
[
{field: 'state', checkbox: true},
{field: 'id', title: __('Id'), operate: false},
{field: 'site_id', title: __('Site_id'), operate: false, formatter:function(value,row,index){
return value==0? '-': row.sites.name;
}},
{field: 'site_id', title: __('Site_id'),
formatter: function (value, row, index) {
return row.sites==null?'':'<a href="javascript:;" class="searchit" data-field="site_id" data-value="' + row.site_id + '">' + row.sites.name + '</a>';
},visible:Config.show_sitename},
{field: 'title', title: __('Title'), align:'left', operate: 'LIKE %...%', placeholder: '关键字,模糊搜索',
formatter: function(value,row,index){
return value + (row.image==''?'' : '<img src="'+Fast.api.cdnurl('/assets/img/img.gif')+'">');
}},
formatter: function(value,row,index){
return value + (row.image==''?'' : ' <span><i class="fa fa-file-image-o text-danger"></i></span>');
}
},
{field: 'flag', title: __('Flag'), formatter: Table.api.formatter.flag, operate: false},
{field: 'lang', title: __('lang'), formatter: Table.api.formatter.langs, operate: false},
{field: 'lang', title: __('lang'), operate: false,
formatter: function(value,row,index){
return __(value);
}
},
{field: 'views', title: __('Views'), operate: false},
//{field: 'comments', title: __('Comments'), operate: false},
{field: 'weigh', title: __('Weigh'), operate: false},
@ -59,7 +65,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
bindevent: function () {
$(document).on("change", "#c-site_id", function () {
that=this;
Fast.api.ajax({url: 'posts/sites/get_site_langs', data: {"lang": $(that).val()}}, function (data) {
Fast.api.ajax({url: 'posts/sites/get_site_langs', data: {"lang": $(that).val()}}, function (r,data) {
$("#language_choose").html(data.html);
Form.api.bindevent($("#language_choose"));
return false;

View File

@ -25,12 +25,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'username', title: __('User_id')},
{field: 'name', title: __('name')},
{field: 'domain', title: __('Domain')},
{field: 'lang', title: __('Lang')},
{field: 'status', title: __('Status'), formatter: Table.api.formatter.status},
{field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime},
{field: 'username', title: __('User_id'), operate:false},
{field: 'name', title: __('name'),operate: 'LIKE %...%',placeholder: '关键字,模糊搜索',},
{field: 'domain', title: __('Domain'),operate: 'LIKE %...%',placeholder: '关键字,模糊搜索',},
{field: 'lang', title: __('Lang'), operate:false},
{field: 'status', title: __('Status'),searchList: {normal: __('Normal'), hidden: __('Hidden')}, formatter: Table.api.formatter.status},
{field: 'createtime', title: __('Createtime'), operate: 'BETWEEN', type: 'datetime', addclass: 'datetimepicker', data: 'data-date-format="YYYY-MM-DD"', formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]