diff --git a/Src/Service/AppContentService.php b/Src/Service/AppContentService.php index 4c554ec..4e37d5b 100644 --- a/Src/Service/AppContentService.php +++ b/Src/Service/AppContentService.php @@ -3,8 +3,10 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Query\Builder; -use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Routing\Route; +use Illuminate\Routing\Router; use Stars\Peace\Entity\MenuBindEntity; +use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class AppContentService @@ -15,19 +17,23 @@ class AppContentService * @param array $inner * @return array */ - public function menuDatas($menuId, $inner=[]){ + public function menuDatas( $menuId , $inner=[] ){ $menuData = []; - $bindInfos = $this->menuBindApps($menuId); + $bindInfos =$this->menuBindApps( $menuId ); + if( $bindInfos ){ + $paginateConfig = configApp( 'stars.paginate'); - $innerBindId = isset($inner['bindId']) ? $inner['bindId'] : 0; - $innerInfoId = isset($inner['infoId']) ? $inner['infoId'] : 0; + $innerBindId = isset( $inner['bindId']) ? $inner['bindId'] : 0; + $innerInfoId = isset( $inner['infoId']) ? $inner['infoId'] : 0; + foreach ($bindInfos as $bind){ $paginate = isset($paginateConfig[$bind['alias_name']]) ? $paginateConfig[$bind['alias_name']] : $paginateConfig['default'] ; - $menuData[$bind['alias_name']] =$this->findMenuData($bind, $innerBindId, $innerInfoId, $paginate) ; + $menuData[$bind['alias_name']] =$this->findMenuData( $bind , $innerBindId , $innerInfoId , $paginate) ; } } + return $menuData ; } @@ -37,12 +43,13 @@ public function menuDatas($menuId, $inner=[]){ * @param string $bindAlias * @return array|Model|Builder|object|null */ - public function findBindPaginateData($bindId, $bindAlias=''){ - $bindInfo =$this->bindInfo($bindId, $bindAlias); + public function findBindPaginateData( $bindId, $bindAlias='' ){ + + $bindInfo =$this->bindInfo($bindId , $bindAlias); if($bindInfo && $bindAlias== $bindInfo['alias_name']){ $paginateConfig = configApp( 'stars.paginate'); $paginate = isset($paginateConfig[$bindInfo['alias_name']]) ? $paginateConfig[$bindInfo['alias_name']] : $paginateConfig['default'] ; - return $this->findMenuData($bindInfo , 0 , 0, $paginate) ; + return $this->findMenuData( $bindInfo , 0 , 0, $paginate ) ; } return []; } @@ -55,32 +62,44 @@ public function findBindPaginateData($bindId, $bindAlias=''){ * @param int $paginate * @return Model|Builder|object|null */ - public function findMenuData($bind ,$innerBindId=0 , $innerInfoId=0 ,$paginate=15){ + public function findMenuData( $bind ,$innerBindId=0 ,$innerInfoId=0 , $paginate=15 ){ $data = null ; $type = strstr( $bind['alias_name'] , '.' , true ); - $className = "App\Entity\\" . str_replace('Sheet','', $bind['sheet_name']); - $dataClass = class_exists($className) ? $className : self::class; - - switch ($type){ - //单一,取最后一条 - case 'single' : - $data = $dataClass::last($bind['id']); - break; - //列表,取所有数据 - case 'list' : - $data = $dataClass::items($bind['id'], $paginate); - break; - //分页,按分页获取 - case 'paginate' : - $paginate = $dataClass::paginate($bind['id'], $bind['alias_name'], $paginate); + $className = "App\Entity\\" . str_replace('Sheet','', $bind['sheet_name'] ); + if( class_exists($className) ){ + if( $type == 'single' ) + { + $data = $className::last( $bind['id'], $bind['alias_name']); + + }elseif ( $innerBindId && $innerInfoId) + { + $data = $className::info( $innerBindId, $innerInfoId ); + + }elseif ($type == 'list') + { + $data = $className::items( $bind['id'], $bind['alias_name'] , $paginate ); + }elseif ( $type == 'paginate') + { + $paginate = $className::paginate( $bind['id'], $bind['alias_name'] , $paginate); + $data['links'] = $paginate->links( configApp('stars.paginate.template') ) ; $data['data'] = $paginate ; - break; - default: - if($innerBindId && $innerInfoId){ - $data = $className::info( $innerBindId, $innerInfoId ); - } + } + + }else{ + + if( $type=='single') + { + $data = self::last( $bind['table_name'] , $bind['id'] ) ; + + } elseif ( $innerBindId && $innerInfoId ) + { + + }elseif ($type == 'list') + { + $data = self::items( $bind['table_name'] , $bind['id'] , $paginate); + } } if(!is_array($data)){ @@ -96,27 +115,29 @@ public function findMenuData($bind ,$innerBindId=0 , $innerInfoId=0 ,$paginate=1 * @return array */ public function menuBindApps( $menuId ){ + $return= DB::table('menu_binds') ->where('menu_id', $menuId) ->get(); + $return = $return ? array_map( function( $v ){ return stdClass2Array($v); } , $return->toArray() ) : []; + return $return ; } /** * 获取多个信息 - * @param $bindId - * @param int $limit - * @param string $select - * @param string $orderRaw + * @param $tableName + * @param $bind_id * @return Model|Builder|object|null */ - public static function items( $bindId , $limit =10 , $select='*' , $orderRaw='`id` DESC'){ - return DB::table( self::bindSheetTableName( $bindId) ) - ->where('bind_id', $bindId ) + public static function items( $tableName, $bind_id , $limit =10 , $select='*' , $orderRaw='`id` DESC'){ + + return DB::table( $tableName ) + ->where('bind_id', $bind_id ) ->selectRaw( $select ) ->orderByRaw($orderRaw) ->limit( $limit ) @@ -125,50 +146,35 @@ public static function items( $bindId , $limit =10 , $select='*' , $orderRaw='`i /** * 详细信息 - * @param $bindId + * @param $tableName + * @param $bind_id * @param $infoId * @return \Illuminate\Support\Collection */ - public static function info( $bindId , $infoId ){ - return DB::table(self::bindSheetTableName($bindId)) - ->where('bind_id', $bindId ) + public static function info( $tableName, $bind_id , $infoId ){ + + return DB::table( $tableName ) + ->where('bind_id', $bind_id ) ->find( $infoId ); } /** * 获取一个信息 - * @param $bindId + * @param $tableName + * @param $bind_id * @param string $select * @param string $orderRaw * @return Model|Builder|object|null */ - public static function last( $bindId , $select='*' , $orderRaw='`id` DESC'){ - return DB::table(self::bindSheetTableName($bindId)) - ->where('bind_id', $bindId ) + public static function last( $tableName, $bind_id , $select='*' , $orderRaw='`id` DESC'){ + + return DB::table( $tableName ) + ->where('bind_id', $bind_id ) ->selectRaw( $select ) ->orderByRaw($orderRaw) ->first(); } - /** - * 分页 - * @param $bindId - * @param $aliasName - * @param $paginate - * @return LengthAwarePaginator - */ - public static function paginate( $bindId, $aliasName , $paginate){ - $page = \request('p',1)-1; - $tableName= self::bindSheetTableName( $bindId) ; - $total = DB::table($tableName)->count(); - $items = DB::table($tableName) - ->skip($page* $paginate ) - ->take($paginate) - ->orderByDesc('id') - ->get(); - return new LengthAwarePaginator($items , $paginate, $total , $page ); - } - /** * 获取绑定信息 * @param $bindId @@ -179,15 +185,6 @@ public function bindInfo( $bindId , $bindAlias ='' ){ return MenuBindEntity::where( 'id', $bindId )->where('alias_name', $bindAlias )->first(); } - /** - * 查询绑定时表名称 - * @param int $bindId - * @return mixed - */ - public static function bindSheetTableName( int $bindId ){ - return MenuBindEntity::where('id',$bindId)->value('table_name'); - } - /** * 格式化当前激活导航的信息 * @param $routerName @@ -205,6 +202,8 @@ public function formatActiveMenuInfo( $routerName , $inner , $activeNavId ){ $activeMenuInfo['template_name'] = $activeMenuInfo['template_name'] && $activeMenuInfo['template_name'] ? str_replace( [ '/', 'zh.' ,'en.' ,'.blade.php'] , ['.', '' ], $activeMenuInfo['template_name'] ) : '' ; - return array_merge ( $activeMenuInfo , parseInnerParams( $inner ) ); + $activeMenuInfo = array_merge ( $activeMenuInfo , parseInnerParams( $inner ) ); + + return $activeMenuInfo; } }