Nav.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
  10. // +----------------------------------------------------------------------
  11. namespace app\cms\admin;
  12. use app\admin\controller\Admin;
  13. use app\common\builder\ZBuilder;
  14. use app\cms\model\Nav as NavModel;
  15. use app\cms\model\Menu as MenuModel;
  16. /**
  17. * 导航控制器
  18. * @package app\cms\admin
  19. */
  20. class Nav extends Admin
  21. {
  22. /**
  23. * 导航列表
  24. * @author 蔡伟明 <314013107@qq.com>
  25. * @return mixed
  26. */
  27. public function index()
  28. {
  29. // 查询
  30. $map = $this->getMap();
  31. // 排序
  32. $order = $this->getOrder('update_time desc');
  33. // 数据列表
  34. $data_list = NavModel::where($map)->order($order)->paginate();
  35. // 自定义按钮
  36. $btnMenuList = [
  37. 'title' => '菜单列表',
  38. 'icon' => 'fa fa-list',
  39. 'href' => url('menu/index', ['id' => '__id__'])
  40. ];
  41. // 使用ZBuilder快速创建数据表格
  42. return ZBuilder::make('table')
  43. ->setSearch(['title' => '标题'])// 设置搜索框
  44. ->addColumns([ // 批量添加数据列
  45. ['id', 'ID'],
  46. ['tag', '标识', 'text.edit'],
  47. ['title', '标题', 'text.edit'],
  48. ['create_time', '创建时间', 'datetime'],
  49. ['update_time', '更新时间', 'datetime'],
  50. ['status', '状态', 'switch'],
  51. ['right_button', '操作', 'btn']
  52. ])
  53. ->addTopButtons('add,enable,disable,delete')// 批量添加顶部按钮
  54. ->addRightButton('custom', $btnMenuList)
  55. ->addRightButton('delete', ['data-tips' => '删除后无法恢复。'])// 批量添加右侧按钮
  56. ->addOrder('id,title,create_time,update_time')
  57. ->setRowList($data_list)// 设置表格数据
  58. ->addValidate('Nav', 'tag,title')
  59. ->fetch(); // 渲染模板
  60. }
  61. /**
  62. * 新增
  63. * @author 蔡伟明 <314013107@qq.com>
  64. * @return mixed
  65. */
  66. public function add()
  67. {
  68. // 保存数据
  69. if ($this->request->isPost()) {
  70. // 表单数据
  71. $data = $this->request->post();
  72. // 验证
  73. $result = $this->validate($data, 'Nav');
  74. if(true !== $result) $this->error($result);
  75. if ($nav = NavModel::create($data)) {
  76. // 记录行为
  77. action_log('nav_add', 'cms_nav', $nav['id'], UID, $data['title']);
  78. $this->success('新增成功', 'index');
  79. } else {
  80. $this->error('新增失败');
  81. }
  82. }
  83. // 显示添加页面
  84. return ZBuilder::make('form')
  85. ->addFormItems([
  86. ['text', 'tag', '菜单标识', '由字母和下划线组成,如:main_nav'],
  87. ['text', 'title', '菜单标题', '必填'],
  88. ['radio', 'status', '立即启用', '', ['否', '是'], 1]
  89. ])
  90. ->fetch();
  91. }
  92. /**
  93. * 删除导航
  94. * @param null $ids 菜单id
  95. * @author 蔡伟明 <314013107@qq.com>
  96. * @return mixed
  97. */
  98. public function delete($ids = null)
  99. {
  100. if ($ids === null) $this->error('参数错误');
  101. // 删除该导航的所有子菜单
  102. if (false === MenuModel::where('nid', 'in', $ids)->delete()) {
  103. $this->error('删除失败');
  104. }
  105. return $this->setStatus('delete');
  106. }
  107. /**
  108. * 启用导航
  109. * @param array $record 行为日志
  110. * @author 蔡伟明 <314013107@qq.com>
  111. * @return mixed
  112. */
  113. public function enable($record = [])
  114. {
  115. return $this->setStatus('enable');
  116. }
  117. /**
  118. * 禁用导航
  119. * @param array $record 行为日志
  120. * @author 蔡伟明 <314013107@qq.com>
  121. * @return mixed
  122. */
  123. public function disable($record = [])
  124. {
  125. return $this->setStatus('disable');
  126. }
  127. /**
  128. * 设置导航状态:删除、禁用、启用
  129. * @param string $type 类型:delete/enable/disable
  130. * @param array $record
  131. * @author 蔡伟明 <314013107@qq.com>
  132. * @return mixed
  133. */
  134. public function setStatus($type = '', $record = [])
  135. {
  136. $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
  137. $nav_title = NavModel::where('id', 'in', $ids)->column('title');
  138. return parent::setStatus($type, ['nav_'.$type, 'cms_nav', 0, UID, implode('、', $nav_title)]);
  139. }
  140. /**
  141. * 快速编辑
  142. * @param array $record 行为日志
  143. * @author 蔡伟明 <314013107@qq.com>
  144. * @return mixed
  145. */
  146. public function quickEdit($record = [])
  147. {
  148. $id = input('post.pk', '');
  149. $field = input('post.name', '');
  150. $value = input('post.value', '');
  151. $nav = NavModel::where('id', $id)->value($field);
  152. $details = '字段(' . $field . '),原值(' . $nav . '),新值:(' . $value . ')';
  153. return parent::quickEdit(['nav_edit', 'cms_nav', $id, UID, $details]);
  154. }
  155. }