LinkmenuController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <?php
  2. namespace app\modules\admin\controllers;
  3. use app\common\controllers\BController;
  4. use app\models\Linkmenu;
  5. use Yii;
  6. class LinkmenuController extends BController
  7. {
  8. public $layout = 'main';
  9. public function actionList()
  10. {
  11. $query = Linkmenu::find();
  12. if (Yii::$app->request->isAjax) {
  13. $data = [];
  14. $params =['key_id'=>0];
  15. $query = mergeParams($query,$params);
  16. $countQuery = clone $query;
  17. //分页
  18. if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));}
  19. if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));}
  20. //排序
  21. if(isset($_GET['sort'])&&isset($_GET['sortOrder']))
  22. {
  23. $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all();
  24. }
  25. else
  26. {
  27. $resultList = $query->orderBy(['menu_id'=>SORT_ASC])->all();
  28. }
  29. foreach($resultList as $result)
  30. {
  31. $data[] = array('menu_id'=>$result->menu_id,'name'=>$result->name);
  32. }
  33. $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data];
  34. echo_json($result);
  35. }
  36. $this->tableTitle = array(
  37. array('field'=>'menu_id','title'=>Linkmenu::getAttributeName('menu_id'),'align'=>'center','class'=>'col-md-2'),
  38. array('field'=>'name','title'=>Linkmenu::getAttributeName('name'),'align'=>'center','class'=>'col-md-8'),
  39. array('field'=>'operate','title'=>Linkmenu::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'),
  40. );
  41. $this->tableConfig = array('table'=>Linkmenu::shortTableName(),'url'=>$this->createRealUrl(['admin/linkmenu/list']),'setFieldUrl'=>$this->createRealUrl(['admin/linkmenu/setfield']),'idField'=>Linkmenu::modelPrimaryKey(),'checkbox'=>0,'dropmenu'=>1,'pagination'=>false,'pagesize'=>20,'refresh'=>true);
  42. return $this->render('list',array('model'=>new Linkmenu()));
  43. }
  44. //添加
  45. function actionAdd()
  46. {
  47. $model = new Linkmenu();
  48. if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
  49. $exist = Linkmenu::find()->where("name='".$model->name."'")->exists();
  50. if($exist)
  51. {
  52. $msgdata = ['error' => 1,'msg' => '已存在该菜单'];
  53. echo_json($msgdata);
  54. }
  55. $model->flagtext = str_replace(",",",",$model->flagtext);
  56. if(!$model->validate())
  57. {
  58. $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
  59. }
  60. else
  61. {
  62. if($model->save())
  63. {
  64. $msgdata = ['error' => 0,'msg' => '操作成功'];
  65. }
  66. else
  67. {
  68. $msgdata = ['error' => 1,'msg' => '操作失败'];
  69. }
  70. }
  71. echo_json($msgdata);
  72. }
  73. return $this->renderAjax('add',array('model'=>$model));
  74. }
  75. function actionEdit()
  76. {
  77. $menu_id = $this->getKeyId('menu_id');
  78. $model = Linkmenu::findOne($menu_id);
  79. check_record_exists($model);
  80. if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
  81. $model->flagtext = str_replace(",",",",$model->flagtext);
  82. if(!$model->validate())
  83. {
  84. $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
  85. }
  86. else
  87. {
  88. if($model->save())
  89. {
  90. $msgdata = ['error' => 0,'msg' => '操作成功'];
  91. }
  92. else
  93. {
  94. $msgdata = ['error' => 1,'msg' => '操作失败'];
  95. }
  96. }
  97. echo_json($msgdata);
  98. }
  99. return $this->renderAjax('add',array('model'=>$model));
  100. }
  101. //删除
  102. public function actionDel()
  103. {
  104. $id = $this->getKeyId('menu_id');
  105. $model = Linkmenu::findOne($id);
  106. check_record_exists($model);
  107. if($model->has_child==1)
  108. {
  109. $msgdata = ['error' => 1,'msg' => '该菜单有子级菜单,删除失败!'];
  110. echo_json($msgdata);
  111. }
  112. if($model->delete())
  113. {
  114. if($model->parent_id)$this->_updateChilds($model->parent_id);
  115. $msgdata = ['error' => 0,'msg' => '操作成功!'];
  116. }
  117. else
  118. {
  119. $msgdata = ['error' => 1,'msg' => '操作失败!'];
  120. }
  121. echo_json($msgdata);
  122. }
  123. //批量删除
  124. public function actionMultidelete()
  125. {
  126. $ids = Yii::$app->request->get('ids');
  127. if(!empty($ids))
  128. {
  129. $ids = explode(",",$ids);
  130. if(is_array($ids))foreach($ids as $id)
  131. {
  132. $model = Linkmenu::findOne($id);
  133. if($model->has_child==1)continue;
  134. if($model->delete())
  135. {
  136. if($model->parent_id)$this->_updateChilds($model->parent_id);
  137. }
  138. }
  139. $msgdata = ['error' => 0,'msg' => '操作成功'];
  140. }
  141. else
  142. {
  143. $msgdata = ['error' => 1,'msg' => '请选择操作记录'];
  144. }
  145. echo_json($msgdata);
  146. }
  147. //子菜单
  148. public function actionData()
  149. {
  150. $menu_id = $this->getKeyId('menu_id');
  151. $menu = Linkmenu::findOne($menu_id);
  152. $menuNameStr = Linkmenu::getMenuNameStr($menu_id,0,' > ');
  153. $query = Linkmenu::find();
  154. if (Yii::$app->request->isAjax) {
  155. $data = [];
  156. if($menu->key_id==0){
  157. $params =['key_id'=>$menu_id,'parent_id'=>0];
  158. }
  159. else
  160. {
  161. $params =['parent_id'=>$menu_id];
  162. }
  163. $query = mergeParams($query,$params);
  164. $countQuery = clone $query;
  165. //分页
  166. if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));}
  167. if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));}
  168. //排序
  169. if(isset($_GET['sort'])&&isset($_GET['sortOrder']))
  170. {
  171. $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all();
  172. }
  173. else
  174. {
  175. $resultList = $query->orderBy(['menu_id'=>SORT_ASC])->all();
  176. }
  177. foreach($resultList as $result)
  178. {
  179. $data[] = array('menu_id'=>$result->menu_id,'name'=>$result->name,'parent_id'=>$result->parent_id,'list_order'=>$result->list_order,'disabled'=>$result->disabled);
  180. }
  181. $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data];
  182. echo_json($result);
  183. }
  184. $this->tableTitle = array(
  185. array('field'=>'menu_id','checkbox'=>false,'formatter'=>'checkboxFormatter','class'=>'col-md-1'),
  186. array('field'=>'menu_id','title'=>Linkmenu::getAttributeName('menu_id'),'align'=>'center','class'=>'col-md-2'),
  187. array('field'=>'name','title'=>Linkmenu::getAttributeName('name'),'align'=>'center','class'=>'col-md-2'),
  188. array('field'=>'disabled','title'=>Linkmenu::getAttributeName('disabled'),'align'=>'center','formatter'=>'switchFormatter','class'=>'col-md-2'),
  189. array('field'=>'list_order','title'=>Linkmenu::getAttributeName('list_order'),'align'=>'center','sortable'=>true,'formatter'=>'editFormatter','class'=>'col-md-3'),
  190. array('field'=>'operate','title'=>Linkmenu::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'),
  191. );
  192. $this->tableConfig = array('table'=>Linkmenu::shortTableName(),'url'=>$this->createRealUrl(['admin/linkmenu/data','menu_id'=>$menu_id]),'setFieldUrl'=>$this->createRealUrl(['admin/linkmenu/setfield']),'idField'=>Linkmenu::modelPrimaryKey(),'checkbox'=>1,'dropmenu'=>1,'refresh'=>true);
  193. //为了传递参数到菜单的动态变量
  194. $_GET['parent_id'] = $menu->parent_id==0?($menu->key_id==0?$menu->menu_id:$menu->key_id):$menu->parent_id;
  195. return $this->render('list',array('model'=>new Linkmenu(),'menuNameStr'=>$menuNameStr));
  196. }
  197. //添加子菜单
  198. function actionAddsonmenu()
  199. {
  200. $parent_id = $this->getKeyId('parent_id');
  201. $parentMenu = Linkmenu::findOne($parent_id);
  202. $model = new Linkmenu();
  203. if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
  204. if($parentMenu->key_id==0)
  205. {
  206. $model->key_id = $parent_id;
  207. $model->level = 1;
  208. $model->parent_id = 0;
  209. }
  210. else
  211. {
  212. $model->key_id = $parentMenu->key_id;
  213. $model->level = $parentMenu->level+1;
  214. $model->parent_id = $parent_id;
  215. }
  216. if(!$model->validate())
  217. {
  218. $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
  219. }
  220. else
  221. {
  222. if($model->save())
  223. {
  224. $this->_updateChilds($model->parent_id);
  225. $msgdata = ['error' => 0,'msg' => '操作成功'];
  226. }
  227. else
  228. {
  229. $msgdata = ['error' => 1,'msg' => '操作失败'];
  230. }
  231. }
  232. echo_json($msgdata);
  233. }
  234. return $this->renderAjax('add',array('model'=>$model));
  235. }
  236. //更新子级菜单
  237. private function _updateChilds($id)
  238. {
  239. $parentModel = Linkmenu::findOne($id);
  240. if(!$parentModel||($parentModel->parent_id==0&&$parentModel->key_id==0))return;
  241. $childs = array();
  242. $childs[]=$id;
  243. $menuList = Linkmenu::find()->where('parent_id='.$id)->all();
  244. if(is_array($menuList))
  245. {
  246. foreach($menuList as $menu)
  247. {
  248. $childs[] = $menu['menu_id'];
  249. }
  250. }
  251. if(!empty($childs)&&count($childs)>1)
  252. {
  253. asort($childs);
  254. $parentModel->arr_child_ids =join(',',$childs);
  255. $parentModel->has_child = 1;
  256. $parentModel->save();
  257. }
  258. else
  259. {
  260. $parentModel->arr_child_ids ='';
  261. $parentModel->has_child = 0;
  262. $parentModel->save();
  263. }
  264. }
  265. }