Backend.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace laytp\controller;
  3. use app\middleware\admin\ActionLog;
  4. use app\middleware\admin\Auth;
  5. use app\service\admin\AuthServiceFacade;
  6. use laytp\BaseController;
  7. /**
  8. * 后台应用admin控制器基类
  9. * @package laytp\controller
  10. */
  11. class Backend extends BaseController
  12. {
  13. use \laytp\traits\Backend;
  14. protected $noNeedLogin = [];//无需登录,也无需鉴权的方法名列表,支持*通配符定义所有方法
  15. protected $noNeedAuth = [];//需要登录,但是无需鉴权的方法名列表,支持*通配符定义所有方法
  16. protected $hasSoftDel = 0;//当前访问的模型是否有软删除功能
  17. protected $orderRule = ['id' => 'desc'];//默认排序规则
  18. /**
  19. * 中间件
  20. * @var array
  21. */
  22. protected $middleware = [
  23. Auth::class,
  24. ActionLog::class,
  25. ];
  26. /**
  27. * 基类初始化方法
  28. */
  29. protected function initialize()
  30. {
  31. //将无需登录的方法名数组设置到权限服务中
  32. AuthServiceFacade::setNoNeedLogin($this->noNeedLogin);
  33. //将无需鉴权的方法名数组设置到权限服务中
  34. AuthServiceFacade::setNoNeedAuth($this->noNeedAuth);
  35. $this->_initialize();
  36. }
  37. //子类初始化
  38. protected function _initialize()
  39. {
  40. }
  41. /**
  42. * 生成查询条件
  43. * post方式传递了search_param参数,就说明是进行筛选搜索
  44. * search_param格式:
  45. * search_param : {
  46. * 数据库字段 : {
  47. * value : 值,
  48. * condition : 搜索条件
  49. * }
  50. * }
  51. * @return array
  52. */
  53. public function buildSearchParams($useUniacid = true)
  54. {
  55. global $_W;
  56. $where = [];
  57. $whereOr = [];
  58. if($useUniacid){
  59. $where[] = ['uniacid', '=', $_W['uniacid']];
  60. }
  61. //传递了search_param就说明是进行搜索查询
  62. $searchParam = $this->request->param('search_param');
  63. if ($searchParam) {
  64. foreach ($searchParam as $field => $valueCondition) {
  65. if ($valueCondition['value'] !== '') {
  66. $condition = trim(strtoupper($valueCondition['condition']));
  67. switch ($condition) {
  68. case '=':
  69. $where[] = [$field, '=', $valueCondition['value']];
  70. break;
  71. case 'FIND_IN_SET':
  72. $values = explode(',', $valueCondition['value']);
  73. foreach ($values as $val) {
  74. $whereOr[] = [$field, 'find in set', $val];
  75. }
  76. if ($whereOr) {
  77. $where[] = function ($query) use ($whereOr) {
  78. $query->whereOr($whereOr);
  79. };
  80. }
  81. break;
  82. case 'LIKE':
  83. $where[] = [$field, 'like', '%' . $valueCondition['value'] . '%'];
  84. break;
  85. case 'IN':
  86. $where[] = [$field, 'in', $valueCondition['value']];
  87. break;
  88. case 'BETWEEN':
  89. $arrBetween = explode(' - ', $valueCondition['value']);
  90. $where[] = [$field, 'between', $arrBetween[0] . ',' . $arrBetween[1]];
  91. break;
  92. case 'BETWEEN_STRTOTIME':
  93. $arrBetween = explode(' - ', $valueCondition['value']);
  94. $begin_time = strtotime($arrBetween[0]);
  95. $end_time = strtotime($arrBetween[1]);
  96. $where[] = [$field, 'between', $begin_time . ',' . $end_time];
  97. break;
  98. case '>':
  99. $where[] = [$field, '>', $valueCondition['value']];
  100. break;
  101. case '>=':
  102. $where[] = [$field, '>=', $valueCondition['value']];
  103. break;
  104. case '<':
  105. $where[] = [$field, '<', $valueCondition['value']];
  106. break;
  107. case '<=':
  108. $where[] = [$field, '<=', $valueCondition['value']];
  109. break;
  110. case '<>':
  111. case '!=':
  112. $where[] = [$field, '<>', $valueCondition['value']];
  113. break;
  114. }
  115. }
  116. }
  117. }
  118. return $where;
  119. }
  120. /**
  121. * 生成排序条件
  122. */
  123. public function buildOrder()
  124. {
  125. $order = $this->orderRule;
  126. //传递了order_param字段,就说明是进行排序搜索
  127. $orderParam = $this->request->param('order_param');
  128. if ($orderParam && $orderParam['field'] && in_array(strtolower($orderParam['type']), ['asc', 'desc'])) {
  129. if (isset($order[$orderParam['field']])) {
  130. $order[$orderParam['field']] = $orderParam['type'];
  131. } else {
  132. $order = array_merge([$orderParam['field'] => $orderParam['type']], $order);
  133. }
  134. }
  135. return $order;
  136. }
  137. /**
  138. * 获取已选中项
  139. */
  140. public function getSelectedData($data)
  141. {
  142. if (!$data) return [];
  143. $selectedVal = $this->request->param('selected');
  144. if (is_array($selectedVal) && $selectedVal) {
  145. $selectedField = $this->request->param('selectedField', 'id');
  146. $columns = array_column($data, $selectedField);
  147. $selectedVal = array_filter(array_unique(array_diff($selectedVal, $columns)));
  148. if ($selectedVal) {
  149. $selectedData = $this->model->where($selectedField, 'in', $selectedVal)->select()->toArray();
  150. $selectedData && $data = array_merge($data, $selectedData);
  151. }
  152. }
  153. return $data;
  154. }
  155. }