Navi.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. class Navi extends Model{
  6. use SoftDelete;
  7. public function getSubnavisAttr($value,$data){
  8. $id = $data['id'];
  9. $subnavis = $this->where(['pid'=>$id])->order('sort asc')->select();
  10. return $subnavis;
  11. }
  12. public function getPnaviAttr($value,$data){
  13. $pid = $data['pid'];
  14. $pnavi = $this->where(['id'=>$pid])->find();
  15. return $pnavi;
  16. }
  17. public function getPositionTextAttr($value,$data){
  18. $text=['admin'=>'总管理','merchant'=>'商户管理'];
  19. $position = $data['position'];
  20. return $text[$position];
  21. }
  22. public function navis($pid,$position='',$filter=[],$level=3){
  23. $func = function ($pid,$position,$filter,$level) use (&$func) {
  24. $where['pid'] = $pid;
  25. if (!empty($position)) {
  26. $where['position'] = ['like','%'.$position.'%'];
  27. }
  28. if (!empty($filter)) {
  29. $where['id'] = array('in',$filter);
  30. }
  31. $list = $this->where($where)->order(['sort asc'])->select();
  32. $data = [];
  33. if($level <= 0) return $data;
  34. $level --;
  35. foreach ($list as $key => $value) {
  36. $data[$key]['id'] = $value['id'];
  37. $data[$key]['pid'] = $value['pid'];
  38. $data[$key]['name'] = $value['name'];
  39. $data[$key]['cname'] = $value['cname'];
  40. $data[$key]['icon'] = $value['icon'];
  41. $data[$key]['target'] = $value['target'];
  42. $data[$key]['action'] = $value['action'];
  43. $data[$key]['url'] = $value['url'];
  44. $data[$key]['type'] = $value['type'];
  45. $data[$key]['key'] = $value['key'];
  46. $data[$key]['position'] = $value['position'];
  47. $data[$key]['sort'] = $value['sort'];
  48. $data[$key]['children'] = $func($value['id'],$position,$filter,$level);
  49. }
  50. return $data;
  51. };
  52. return $func($pid,$position,$filter,$level);
  53. }
  54. public function tree($pid,$position='',$filter=[],$level=3){
  55. $func = function ($pid,$position,$filter,$level) use (&$func) {
  56. $where['pid'] = $pid;
  57. if (!empty($position)) {
  58. $where['position'] = ['like','%'.$position.'%'];
  59. }
  60. if (!empty($filter)) {
  61. $where['id'] = array('in',$filter);
  62. }
  63. $list = model('Navi')->where($where)->order(['sort asc'])->select();
  64. $data = [];
  65. if($level <= 0) return $data;
  66. foreach ($list as $key => $value) {
  67. $data[$key]['id'] = $value['id'];
  68. $data[$key]['pid'] = $value['pid'];
  69. $data[$key]['title'] = $value['cname'];
  70. $data[$key]['children'] = $func($value['id'],$position,$filter,$level);
  71. }
  72. $level --;
  73. return $data;
  74. };
  75. return $func($pid,$position,$filter,$level);
  76. }
  77. public function getUrlAttr($value,$data){
  78. $action = $data['action'];
  79. if(strpos($action, 'http') === false){
  80. $params = $data['params'];
  81. $params = json_decode($params,true);
  82. return url($action,$params);
  83. }
  84. return $action;
  85. }
  86. }