mirror of https://gitee.com/zorlan/skycaiji
273 lines
8.9 KiB
PHP
273 lines
8.9 KiB
PHP
<?php
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| SkyCaiji (蓝天采集器)
|
|
|--------------------------------------------------------------------------
|
|
| Copyright (c) 2018 http://www.skycaiji.com All rights reserved.
|
|
|--------------------------------------------------------------------------
|
|
| 使用协议 http://www.skycaiji.com/licenses
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
namespace skycaiji\admin\controller;
|
|
|
|
use think\Loader;
|
|
class Taskgroup extends BaseController {
|
|
/**
|
|
* 任务分组列表
|
|
*/
|
|
public function listAction(){
|
|
$page=input('p/d',1);
|
|
$page=max(1,$page);
|
|
|
|
$search['parent_id']=input('parent_id/d',0);
|
|
$search['name']=input('name');
|
|
$mtaskgroup=model('Taskgroup');
|
|
|
|
$cond=array();
|
|
if($search['parent_id']>0){
|
|
$cond['parent_id']=$search['parent_id'];
|
|
}
|
|
if(!empty($search['name'])){
|
|
$cond['name']=array('like','%'.addslashes($search['name']).'%');
|
|
}
|
|
|
|
$this->assign('search',$search);
|
|
|
|
$limit=20;
|
|
if($cond){
|
|
|
|
$count=$mtaskgroup->where($cond)->count();
|
|
if($count>0){
|
|
$parentList=$mtaskgroup->where($cond)->order('sort desc')->paginate($limit,false,paginate_auto_config());
|
|
}
|
|
}else{
|
|
|
|
$cond=array('parent_id'=>0);
|
|
$count=$mtaskgroup->where($cond)->count();
|
|
if($count>0){
|
|
$parentList=$mtaskgroup->where($cond)->order('sort desc')->paginate($limit,false,paginate_auto_config());
|
|
$parentIds=array();
|
|
foreach ($parentList->all() as $item){
|
|
$parentIds[$item['id']]=$item['id'];
|
|
}
|
|
$subList1=$mtaskgroup->where(array('parent_id'=>array('in',$parentIds)))->order('sort desc')->column('*');
|
|
$subList=array();
|
|
foreach ($subList1 as $item){
|
|
$subList[$item['parent_id']][$item['id']]=$item;
|
|
}
|
|
unset($subList1);
|
|
}
|
|
}
|
|
if(isset($parentList)){
|
|
$pagenav = $parentList->render();
|
|
$this->assign('pagenav',$pagenav);
|
|
$parentList=$parentList->all();
|
|
}else{
|
|
$parentList=null;
|
|
}
|
|
|
|
|
|
$this->assign('parentList',$parentList);
|
|
$this->assign('subList',$subList);
|
|
|
|
$parentTgList=$mtaskgroup->where(array('parent_id'=>0))->order('sort desc')->column('name','id');
|
|
$this->assign('parentTgList',$parentTgList);
|
|
|
|
$GLOBALS['content_header']=lang('taskgroup_list');
|
|
$GLOBALS['breadcrumb']=breadcrumb(array(array('url'=>url('Taskgroup/list'),'title'=>lang('taskgroup_list'))));
|
|
return $this->fetch();
|
|
}
|
|
/**
|
|
* 添加任务分组
|
|
*/
|
|
public function addAction(){
|
|
$mtaskgroup=model('Taskgroup');
|
|
if(request()->isPost()){
|
|
$newData=input('param.');
|
|
$validate=Loader::validate('Taskgroup');
|
|
if(!$validate->scene('add')->check($newData)){
|
|
|
|
$this->error($validate->getError());
|
|
}
|
|
|
|
$mtaskgroup->isUpdate(false)->allowField(true)->save($newData);
|
|
$tgid=$mtaskgroup->id;
|
|
if($tgid>0){
|
|
$this->success(lang('op_success'),input('referer','','trim')?input('referer','','trim'):('Taskgroup/edit?id='.$tgid));
|
|
}else{
|
|
$this->error(lang('op_failed'));
|
|
}
|
|
}else{
|
|
$parentTgList=$mtaskgroup->where(array('parent_id'=>0))->order('sort desc')->column('name','id');
|
|
$this->assign('parentTgList',$parentTgList);
|
|
|
|
$GLOBALS['content_header']=lang('taskgroup_add');
|
|
$GLOBALS['breadcrumb']=breadcrumb(array(array('url'=>url('Taskgroup/list'),'title'=>lang('taskgroup_list')),lang('taskgroup_add')));
|
|
|
|
if(request()->isAjax()){
|
|
return view('add_ajax');
|
|
}else{
|
|
return $this->fetch('add');
|
|
}
|
|
|
|
}
|
|
}
|
|
/**
|
|
* 编辑任务分组
|
|
*/
|
|
public function editAction(){
|
|
$mtaskgroup=model('Taskgroup');
|
|
$id=input('id/d',0);
|
|
$tgData=$mtaskgroup->getById($id);
|
|
if(empty($tgData)){
|
|
$this->error(lang('tg_none'));
|
|
}
|
|
if(request()->isPost()){
|
|
$newData=input('param.');
|
|
$validate=Loader::validate('Taskgroup');
|
|
if(!$validate->scene('edit')->check($newData)){
|
|
|
|
$this->error($validate->getError());
|
|
}
|
|
if($tgData['name']!=$newData['name']){
|
|
|
|
if($mtaskgroup->where(array('name'=>$newData['name']))->count()>0){
|
|
$this->error(lang('tg_error_has_name'));
|
|
}
|
|
}
|
|
if($newData['parent_id']>0){
|
|
|
|
$subCount=$mtaskgroup->where(array('parent_id'=>$tgData['id']))->count();
|
|
if($subCount>0){
|
|
$this->error(lang('tg_is_parent'));
|
|
}
|
|
}
|
|
if($newData['parent_id']==$tgData['id']){
|
|
|
|
unset($newData['parent_id']);
|
|
}
|
|
unset($newData['id']);
|
|
|
|
$result=$mtaskgroup->strict(false)->where(array('id'=>intval($tgData['id'])))->update($newData);
|
|
if($result>=0){
|
|
$this->success(lang('op_success'),'Taskgroup/edit?id='.$tgData['id']);
|
|
}else{
|
|
$this->error(lang('op_failed'));
|
|
}
|
|
}else{
|
|
$parentTgList=$mtaskgroup->where(array('parent_id'=>0))->order('sort desc')->column('name','id');
|
|
$this->assign('parentTgList',$parentTgList);
|
|
$this->assign('tgData',$tgData);
|
|
|
|
$GLOBALS['content_header']=lang('taskgroup_edit');
|
|
$GLOBALS['breadcrumb']=breadcrumb(array(array('url'=>url('Taskgroup/list'),'title'=>lang('taskgroup_list')),lang('taskgroup_edit')));
|
|
|
|
if(request()->isAjax()){
|
|
return view('add_ajax');
|
|
}else{
|
|
return $this->fetch('add');
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* 任务分组操作
|
|
*/
|
|
public function opAction(){
|
|
$id=input('id/d',0);
|
|
$op=input('op');
|
|
|
|
$ops=array('item'=>array('delete','move'),'list'=>array('deleteall','saveall'));
|
|
if(!in_array($op,$ops['item'])&&!in_array($op,$ops['list'])){
|
|
|
|
$this->error(lang('invalid_op'));
|
|
}
|
|
|
|
$mtaskgroup=model('Taskgroup');
|
|
if(in_array($op,$ops['item'])){
|
|
|
|
$tgData=$mtaskgroup->getById($id);
|
|
if(empty($tgData)){
|
|
$this->error(lang('empty_data'));
|
|
}
|
|
$this->assign('tgData',$tgData);
|
|
}
|
|
$this->assign('op',$op);
|
|
$mtask=model('Task');
|
|
if($op=='delete'){
|
|
|
|
if($mtaskgroup->where(array('parent_id'=>$tgData['id']))->count()>0){
|
|
|
|
$this->error(lang('tg_exist_sub'));
|
|
}else{
|
|
|
|
$mtaskgroup->where(array('id'=>$id))->delete();
|
|
$mtask->strict(false)->where(array('tg_id'=>$id))->update(array('tg_id'=>0));
|
|
$this->success(lang('delete_success'));
|
|
}
|
|
}elseif($op=='move'){
|
|
|
|
$parentTgList=$mtaskgroup->where(array('parent_id'=>0))->column('name','id');
|
|
if(request()->isPost()){
|
|
$parent_id=input('parent_id/d',0);
|
|
|
|
if($parent_id>0&&$parent_id!=$tgData['parent_id']){
|
|
|
|
$subCount=$mtaskgroup->where(array('parent_id'=>$tgData['id']))->count();
|
|
if($subCount>0){
|
|
$this->error(lang('tg_is_parent'));
|
|
}
|
|
}
|
|
|
|
if($tgData['id']!=$parent_id){
|
|
|
|
$mtaskgroup->strict(false)->where(array('id'=>intval($tgData['id'])))->update(array('parent_id'=>$parent_id));
|
|
}
|
|
$this->success(lang('op_success'),input('referer','','trim'));
|
|
}else{
|
|
$this->assign('parentTgList',$parentTgList);
|
|
return $this->fetch();
|
|
}
|
|
}elseif($op=='deleteall'){
|
|
|
|
$ids=input('ids/a');
|
|
if(is_array($ids)&&count($ids)>0){
|
|
$list=$mtaskgroup->where(array('id'=>array('in',$ids)))->column('*');
|
|
$deleteIds=array();
|
|
foreach ($list as $item){
|
|
|
|
$subCount=$mtaskgroup->where(array('parent_id'=>$item['id']))->count();
|
|
if($subCount==0){
|
|
$deleteIds[$item['id']]=$item['id'];
|
|
}else{
|
|
$hasSub=true;
|
|
}
|
|
}
|
|
if($deleteIds){
|
|
$mtaskgroup->where(array('id'=>array('in',$deleteIds)))->delete();
|
|
$mtask->strict(false)->where(array('tg_id'=>array('in',$deleteIds)))->update(array('tg_id'=>0));
|
|
}
|
|
}
|
|
$this->success(lang($hasSub?'tg_deleteall_has_sub':'op_success'));
|
|
}elseif($op=='saveall'){
|
|
|
|
$ids=input('ids/a');
|
|
$newsort=input('newsort/a');
|
|
if(is_array($ids)&&count($ids)>0){
|
|
$ids=array_map('intval', $ids);
|
|
|
|
$updateSql=' UPDATE '.$mtaskgroup->getQuery()->getTable().' SET `sort` = CASE `id` ';
|
|
foreach ($ids as $tgid){
|
|
$updateSql.= sprintf(" WHEN %d THEN '%s' ", $tgid, intval($newsort[$tgid]));
|
|
}
|
|
$updateSql.='END WHERE `id` IN ('. implode(',',$ids).')';
|
|
try{
|
|
$mtaskgroup->execute($updateSql);
|
|
}catch (\Exception $ex){
|
|
$this->error(lang('op_failed'));
|
|
}
|
|
}
|
|
$this->success(lang('op_success'),'list');
|
|
}
|
|
}
|
|
} |