Manager.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecadmin\block\menu;
  10. use Yii;
  11. use fec\helpers\CRequest;
  12. use fec\helpers\CUrl;
  13. use fec\helpers\CModel;
  14. use fecadmin\models\AdminUser\AdminUserForm;
  15. use fecadmin\models\AdminMenu;
  16. use fecadmin\models\AdminRoleMenu;
  17. /**
  18. * @author Terry Zhao <2358269014@qq.com>
  19. * @since 1.0
  20. */
  21. class Manager{
  22. # 传递给前端的数据 显示编辑form
  23. public function getLastData(){
  24. $AdminMenu = new AdminMenu;
  25. $AdminMenu->_ajaxMenuEditUrl = CUrl::getUrl("fecadmin/menu/edit");
  26. $menTreeHtml = $AdminMenu->getEditMenuTreeHtml();
  27. $createMenuUrl = CUrl::getUrl("fecadmin/menu/create");
  28. $deleteMenuUrl = CUrl::getUrl("fecadmin/menu/delete");
  29. $editMenuUrl = CUrl::getUrl("fecadmin/menu/editsave");
  30. return [
  31. 'menTreeHtml' => $menTreeHtml,
  32. 'createMenuUrl' => $createMenuUrl,
  33. 'deleteMenuUrl' => $deleteMenuUrl,
  34. 'editMenuUrl' => $editMenuUrl,
  35. ];
  36. }
  37. public function editMenuSave(){
  38. $editFormData = CRequest::param("editFormData");
  39. if(!isset($editFormData['id'])){
  40. echo json_encode(["statusCode"=>"300",
  41. "message" => "id can not empty!",
  42. ]);
  43. exit;
  44. }
  45. $AdminMenu = AdminMenu::findOne(['id' => $editFormData['id'] ]);
  46. if(!$AdminMenu->id){
  47. echo json_encode(["statusCode"=>"300",
  48. "message" => "id is not exist!",
  49. ]);
  50. exit;
  51. }
  52. $role_key = $editFormData['role_key'] ? $editFormData['role_key'] : $this->getMenuRoleKey($editFormData['url_key']);
  53. $AdminMenu->role_key = $role_key;
  54. $AdminMenu->attributes = $editFormData;
  55. $AdminMenu->updated_at = date('Y-m-d H:i:s');
  56. if($AdminMenu->validate()){
  57. $AdminMenu->save();
  58. echo json_encode(["statusCode"=>"200",
  59. "message" => "Success",
  60. ]);
  61. exit;
  62. }else{
  63. $errors = $AdminMenu->errors;
  64. echo json_encode(["statusCode"=>"300",
  65. "message" => CModel::getErrorStr($errors),
  66. ]);
  67. exit;
  68. }
  69. }
  70. public function edit(){
  71. $id = CRequest::param("id");
  72. $adminMenu = AdminMenu::findOne(['id'=>$id ]);
  73. if($adminMenu->id == null){
  74. echo 'this menu is not exist!';
  75. exit;
  76. }
  77. $id = $adminMenu->id;
  78. $parent_id = $adminMenu->parent_id;
  79. $name = $adminMenu->name;
  80. $url_key = $adminMenu->url_key;
  81. $role_key = $adminMenu->role_key;
  82. $sort_order = $adminMenu->sort_order;
  83. $str = '<fieldset id="fieldset_table_qbe">
  84. <legend style="color:#cc0000">编辑信息</legend>
  85. <div style="height:180px;">
  86. <input type="hidden" name="editFormData[id]" value="'.$id.'" />
  87. <input type="hidden" name="editFormData[parent_id]" value="'.$parent_id.'" />
  88. <p>
  89. <label>Name:</label>
  90. <input type="text" value="'.$name.'" size="30" name="editFormData[name]" class="current_parent_menu_name textInput require ">
  91. </p>
  92. <p>
  93. <label>Url Key</label>
  94. <input type="text" value="'.$url_key.'" size="30" name="editFormData[url_key]" class="textInput require">
  95. </p>
  96. <p>
  97. <label>Role Key</label>
  98. <input type="text" value="'.$role_key.'" size="30" name="editFormData[role_key]" class="textInput require">
  99. </p>
  100. <p>
  101. <label>SortOrder</label>
  102. <input type="text" value="'.$sort_order.'" size="30" name="editFormData[sort_order]" class="textInput require">
  103. </p>
  104. <div style="clear:both;"></div>
  105. <br/>
  106. <div>
  107. <span style="line-height:18px;">Role Key说明:在Url Key的基础上去掉action部分,如果不填写,系统自动去掉Url Key的最后部分
  108. ,譬如 url_key = /fecadmin/menu/manager ,系统自动生成/fecadmin/menu。
  109. 如果url_key = /fecadmin/menu/index,但是您填写的url_key = /fecadmin/menu,系统自动生成/fecadmin,就会报错!
  110. 所以,请填写完整的url key, 不要省略掉index部分。如果省略掉,则需要手动填写Role Key的值
  111. </span>
  112. </div>
  113. </div>
  114. </fieldset>
  115. <fieldset id="fieldset_table_qbe">
  116. <legend style="color:#cc0000">当前信息</legend>
  117. <div>
  118. <p>
  119. <label>id:</label>
  120. <input type="text" value="'.$id.'" size="30" readonly="readonly" class="current_parent_id textInput readonly">
  121. </p>
  122. <p>
  123. <label>ParentId</label>
  124. <input type="text" value="'.$parent_id.'" size="30" readonly="readonly" class=" textInput readonly">
  125. </p>
  126. </div>
  127. </fieldset>
  128. <div class="formBar">
  129. <ul style="float:left;">
  130. <li><div class="buttonActive"><div class="buttonContent"><button type="submit">提交</button></div></div></li>
  131. <li><div class="button"><div class="buttonContent"><button type="button" class="close">取消</button></div></div></li>
  132. </ul>
  133. </div>
  134. ';
  135. echo $str;exit;
  136. }
  137. public function getMenuRoleKey($url_key){
  138. if($url_key){
  139. $url_key_arr = explode("/",$url_key);
  140. unset($url_key_arr[count($url_key_arr)-1]);
  141. if(!empty($url_key_arr)){
  142. return implode("/",$url_key_arr);
  143. }
  144. }
  145. return '';
  146. }
  147. public function createMenuSave(){
  148. $editFormData = CRequest::param('editFormData');
  149. $parent_id = $editFormData['parent_id'] ? $editFormData['parent_id'] :0;
  150. $editFormData['parent_id'] = $parent_id;
  151. $role_key = $editFormData['role_key'] ? $editFormData['role_key'] : $this->getMenuRoleKey($editFormData['url_key']);
  152. //$name = $editFormData['name'];
  153. //$url_key = $editFormData['url_key'];
  154. $AdminMenu = new AdminMenu;
  155. $AdminMenu->attributes = $editFormData;
  156. $AdminMenu->role_key = $role_key;
  157. if(!$parent_id){
  158. $AdminMenu->level = 1;
  159. }else{
  160. $level = AdminMenu::findOne(['id'=>$parent_id])->level;
  161. $AdminMenu->level = $level + 1;
  162. }
  163. $AdminMenu->created_at = date('Y-m-d H:i:s');
  164. $AdminMenu->updated_at = date('Y-m-d H:i:s');
  165. if($AdminMenu->validate()){
  166. $AdminMenu->save();
  167. echo json_encode(["statusCode"=>"200",
  168. "message" => "Success",
  169. ]);
  170. exit;
  171. }else{
  172. $errors = $AdminMenu->errors;
  173. echo json_encode(["statusCode"=>"300",
  174. "message" => CModel::getErrorStr($errors),
  175. ]);
  176. exit;
  177. }
  178. }
  179. public function deleteMenu(){
  180. $id = CRequest::param("id");
  181. if(!$id){
  182. echo json_encode(["statusCode"=>"300",
  183. "message" => "id can not empty",
  184. ]);
  185. exit;
  186. }else{
  187. $one = AdminMenu::find()->where(" id = :id AND can_delete = 2 ",[':id'=>$id])->one();
  188. //echo $one->id;
  189. if($one->id){
  190. $ids = $this->getMenuAllChildId($id);
  191. $ids[] = $id;
  192. # 1. 删除当前分类对应的所有子分类
  193. # 2. 删除在menu_id 对应到权限中的所有menu_id
  194. $innerTransaction = Yii::$app->db->beginTransaction();
  195. try {
  196. AdminRoleMenu::deleteAll(['in','menu_id',$ids]);
  197. $one->deleteAll([
  198. 'and',
  199. ['can_delete' => 2],
  200. ['in','id',$ids]
  201. ]);
  202. $innerTransaction->commit();
  203. echo json_encode(["statusCode"=>"200",
  204. "message" => "delete menu success! MENU NAME:".$one->name,
  205. ]);
  206. } catch (Exception $e) {
  207. $innerTransaction->rollBack();
  208. }
  209. exit;
  210. }else{
  211. echo json_encode(["statusCode"=>"300",
  212. "message" => "the menu can not delete",
  213. ]);
  214. exit;
  215. }
  216. }
  217. }
  218. public function getMenuAllChildId($id,$ids=[]){
  219. $adminMenu = new AdminMenu;
  220. $data = AdminMenu::find()->asArray()
  221. //->select(['id'])
  222. //->where(['parent_id' => $id])
  223. ->where(" parent_id = :parent_id AND can_delete = 2 ",[':parent_id'=>$id])
  224. ->all();
  225. if(!empty($data)){
  226. foreach($data as $node){
  227. $ids[] = $node['id'];
  228. if($adminMenu->hasChild($node)){
  229. $ids[] = $this->getMenuAllChildId($node['id']);
  230. }
  231. }
  232. }
  233. return $ids;
  234. }
  235. }