Official.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 公众号管理
  7. */
  8. namespace app\system\controller\passport;
  9. use app\common\model\SystemMemberOfficialMenu;
  10. use app\common\facade\WechatMp;
  11. use Exception;
  12. class Official extends Common{
  13. protected $app;
  14. public function initialize() {
  15. parent::initialize();
  16. if($this->user->lock_config){
  17. $this->error('你账户锁定配置权限');
  18. }
  19. if($this->user->parent_id){
  20. $this->error('无权限访问,只有创始人身份才允许使用.');
  21. }
  22. if(!$this->member_miniapp_id){
  23. $this->error('未找到所属应用,请先开通应用.');
  24. }
  25. if ($this->member_miniapp->miniapp->types == 'program' || $this->member_miniapp->miniapp->types == 'app'){
  26. $this->error('非公众号应用',url('system/passport.setting/index'));
  27. }
  28. if($this->member_miniapp->miniapp->is_openapp == 0){
  29. if(empty(WechatMp::isTypes($this->member_miniapp_id))){
  30. // $this->redirect('system/passport.setting/pushAuth',['id' => $this->member_miniapp_id,'types'=>'mp']);
  31. $this->error('请先授权公众号',url('passport.setting/index'),'去授权应用');
  32. exit;
  33. }
  34. }
  35. $this->assign('pathMaps',[['name'=>$this->member_miniapp->appname,'url'=>'javascript:;'],['name'=>'应用管理','url'=>url("system/passport.setting/index")],['name'=>'公众号管理','url'=>url("system/passport.official/index")]]);
  36. }
  37. /**
  38. * 导航菜单
  39. */
  40. public function index(int $parent_id = 0){
  41. $view['lists'] = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id,'parent_id' => $parent_id])->order('sort asc,id desc')->select();
  42. $view['menu'] = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id])->order('sort asc,id desc')->select();
  43. $view['parent_id'] = $parent_id;
  44. $view['action_btn'] = count($view['lists']) >= ($parent_id ? 5 : 3) ? false : true;
  45. return view('menu')->assign($view);;
  46. }
  47. /**
  48. * 公众号管理添加菜单
  49. * @access public
  50. */
  51. public function menuAdd(int $parent_id = 0){
  52. if(request()->isAjax()){
  53. $data = [
  54. 'parent_id' => $this->request->param('parent_id/d'),
  55. 'member_miniapp_id' => $this->member_miniapp_id,
  56. 'types' => $this->request->param('types/s'),
  57. 'name' => $this->request->param('name/s'),
  58. 'key' => $this->request->param('key/s'),
  59. 'url' => $this->request->param('url/s'),
  60. 'pagepath' => $this->request->param('pagepath/s'),
  61. 'update_time' => time(),
  62. 'sort' => 0,
  63. ];
  64. $validate = $this->validate($data,'Official.add');
  65. if(true !== $validate){
  66. return json(['code'=>0,'msg'=>$validate]);
  67. }
  68. $count = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id,'parent_id' =>$data['parent_id']])->count();
  69. if($data['parent_id']){
  70. if($count >= 5) return json(['code'=>0,'msg'=>'二级菜单禁止超过5个']);
  71. }else{
  72. if($count >= 3) return json(['code'=>0,'msg'=>'一级菜单禁止超过3个']);
  73. }
  74. $result = SystemMemberOfficialMenu::insert($data);
  75. if($result){
  76. return json(['code'=>200,'url'=>url('passport.official/index',['parent_id'=>$data['parent_id']]),'msg'=>'操作成功']);
  77. }else{
  78. return json(['code'=>0,'msg'=>'操作失败']);
  79. }
  80. }else{
  81. $view['menu'] = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id])->order('sort asc,id desc')->select();
  82. $view['parent_id'] = $parent_id;
  83. return view()->assign($view);
  84. }
  85. }
  86. /**
  87. * 公众号管理编辑
  88. * @access public
  89. */
  90. public function menuEdit(int $id){
  91. if(request()->isAjax()){
  92. $data = [
  93. 'id' => $this->request->param('menu_id/d'),
  94. 'parent_id' => $this->request->param('parent_id/d'),
  95. 'types' => $this->request->param('types/s'),
  96. 'name' => $this->request->param('name/s'),
  97. 'key' => $this->request->param('key/s'),
  98. 'url' => $this->request->param('url/s'),
  99. 'pagepath' => $this->request->param('pagepath/s'),
  100. 'update_time' => time(),
  101. ];
  102. $validate = $this->validate($data,'Official.edit');
  103. if(true !== $validate){
  104. return json(['code'=>0,'msg'=>$validate]);
  105. }
  106. $result = SystemMemberOfficialMenu::update($data);
  107. if($result){
  108. return json(['code'=>200,'url'=>url('passport.official/index',['parent_id' => $data['parent_id']]),'msg'=>'操作成功']);
  109. }else{
  110. return json(['code'=>0,'msg'=>'操作失败']);
  111. }
  112. }else{
  113. $view['info'] = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id,'id' => $id])->find();
  114. if(empty($view['info'])){
  115. $this->error("404 NOT FOUND");
  116. }
  117. $view['menu'] = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id])->order('sort asc,id desc')->select();
  118. return view()->assign($view);
  119. }
  120. }
  121. /**
  122. * 公众号菜单删除
  123. * @access public
  124. */
  125. public function menuDel(int $id){
  126. $info = SystemMemberOfficialMenu::where(['parent_id' => $id])->find();
  127. if($info){
  128. return json(['code'=>403,'msg'=>'删除失败,请查看是否包含子菜单']);
  129. }
  130. $result = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id,'id' => $id])->delete();
  131. if($result){
  132. return json(['code'=>200,'msg'=>'操作成功','url' => url('system/passport.official/index')]);
  133. }else{
  134. return json(['code'=>403,'msg'=>'删除失败']);
  135. }
  136. }
  137. /**
  138. * 公众号菜单排序
  139. * @access public
  140. */
  141. public function menuSort(){
  142. if(request()->isAjax()){
  143. $data = [
  144. 'sort' => $this->request->param('sort/d'),
  145. 'id' => $this->request->param('id/d'),
  146. ];
  147. $validate = $this->validate($data,'Official.sort');
  148. if(true !== $validate){
  149. return json(['code'=>0,'msg'=>$validate]);
  150. }
  151. $result = SystemMemberOfficialMenu::where(['member_miniapp_id' => $this->member_miniapp_id,'id' => $data['id']])->update(['sort' => $data['sort']]);
  152. if($result){
  153. return json(['code'=>200,'msg'=>'操作成功']);
  154. }else{
  155. return json(['code'=>0,'msg'=>'操作失败']);
  156. }
  157. }
  158. }
  159. /**
  160. * 公众号菜单同步
  161. * @access public
  162. */
  163. public function menuSync(){
  164. if(request()->isAjax()){
  165. try {
  166. $menu = SystemMemberOfficialMenu::official_menu($this->member_miniapp_id);
  167. if(empty($menu)){
  168. return json(['code'=>204,'msg'=>'微信菜单没有创建']);
  169. }
  170. $official = WechatMp::isTypes($this->member_miniapp_id);
  171. if(!$official){
  172. return json(['code'=>0,'msg'=>'【'.$this->member_miniapp->appname.'】微信认证失败,请确认公众号是否已经授权']);
  173. }
  174. $rel = $official->menu->create($menu);
  175. if($rel['errcode'] == 0){
  176. return json(['code'=>200,'msg'=>'【'.$this->member_miniapp->appname.'】同步成功']);
  177. }else{
  178. return json(['code'=>0,'msg'=>'【'.$this->member_miniapp->appname.'】同步失败,'.$rel['errcode']]);
  179. }
  180. } catch (\Exception $e) {
  181. return enjson(0,$e->getMessage());
  182. }
  183. }
  184. }
  185. }