diff --git a/app/Admin/Controllers/Article/IndexController.php b/app/Admin/Controllers/Article/IndexController.php index 3109c1f..78f041c 100644 --- a/app/Admin/Controllers/Article/IndexController.php +++ b/app/Admin/Controllers/Article/IndexController.php @@ -25,7 +25,7 @@ class IndexController extends AdminController $filter->equal('categories.id', '所属分类') ->select(Category::selectOptions(function ($model) { return $model->where('status', 1) - ->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]); + ->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW,Category::TYPE_PERSON]); }, '所有分类')); }); diff --git a/app/Admin/Controllers/Category/IndexController.php b/app/Admin/Controllers/Category/IndexController.php index 15ffd74..763fceb 100644 --- a/app/Admin/Controllers/Category/IndexController.php +++ b/app/Admin/Controllers/Category/IndexController.php @@ -81,7 +81,7 @@ class IndexController extends AdminController $payload .= " [ID:{$branch['id']}] - "; $payload .= " {$branch['title']} "; $payload .= " {$branch['type']} "; - $payload .= " {$branch['description']}"; + $payload .= " {$branch['template']}"; return $payload; }); diff --git a/app/Admin/Controllers/Resume/GroupController.php b/app/Admin/Controllers/Resume/GroupController.php new file mode 100644 index 0000000..e969912 --- /dev/null +++ b/app/Admin/Controllers/Resume/GroupController.php @@ -0,0 +1,43 @@ +model()->orderBy('id', 'desc'); + + $grid->filter(function ($filter) { + $filter->column(1 / 2, function ($filter) { + $filter->like('name', '名称'); + }); + $filter->disableIdFilter(); + }); + + $grid->column('id', '#ID#'); + $grid->column('name', '名称'); + $grid->column('status', '状态')->switch(); + $grid->column('created_at', '创建时间'); + return $grid; + } + + public function form(): Form + { + $form = new Form(new ResumeGroup); + + $form->text('name', '名称')->rules('min:2')->required(); + $form->switch('status', '状态')->default(1); + return $form; + } + +} diff --git a/app/Admin/Controllers/Resume/IndexController.php b/app/Admin/Controllers/Resume/IndexController.php new file mode 100644 index 0000000..430f7bb --- /dev/null +++ b/app/Admin/Controllers/Resume/IndexController.php @@ -0,0 +1,88 @@ +model()->orderBy('id', 'desc'); + + $grid->filter(function ($filter) { + $filter->column(1 / 2, function ($filter) { + $filter->like('name', '姓名'); + $filter->equal('categories.id', '所属分类') + ->select(Category::selectOptions(function ($model) { + return $model->where('status', 1)->whereIn('type', [Category::TYPE_PERSON]); + }, '所有分类')); + }); + + $filter->disableIdFilter(); + }); + + $grid->column('id', '#ID#'); + $grid->column('name', '姓名'); + $grid->column('cover', '封面图片')->image('', 100); + $grid->column('category.title', '所属分类'); + $grid->column('status', '状态')->switch(); + $grid->column('created_at', '创建时间'); + return $grid; + } + + public function form(): Form + { + $form = new Form(new Resume()); + + $form->text('name', '姓名')->rules('min:2')->required(); + $form->textarea('description', '简介'); + $form->image('cover', '封面') + ->move('person/'.date('Y/m/d')) + ->removable() + ->uniqueName() + ->required(); + + $form->select('category_id', '所属分类') + ->options(function () { + return Category::where('status', 1)->where('type', Category::TYPE_PERSON)->pluck('title', 'id'); + }) + ->required(); + + $form->select('group_id', '所属科室') + ->options(function () { + return ResumeGroup::where('status', 1)->pluck('name', 'id'); + }) + ->required(); + + $form->embeds('information', '基本信息', function ($form) { + $form->text('duty', '职务'); + $form->text('rank', '职称')->required(); + $form->text('education', '学历')->required(); + $form->text('mobile', '电话')->required(); + $form->text('email', '电子邮件')->required(); + $form->text('address', '通讯地址')->required(); + }); + + + $form->textarea('direction', '研究方向'); + $form->ueditor('content', '简历')->rules('required', ['required' => '简历不能为空']); + $form->ueditor('outcome', '代表成果')->rules('required', ['required' => '代表成果不能为空']); + $form->ueditor('project', '承担科研项目情况')->rules('required', ['required' => '承担科研项目情况不能为空']); + $form->datetime('created_at', '发布时间'); + + $form->switch('status', '状态')->default(1); + + return $form; + } + +} diff --git a/app/Admin/Routes/resume.php b/app/Admin/Routes/resume.php new file mode 100644 index 0000000..a3ab1be --- /dev/null +++ b/app/Admin/Routes/resume.php @@ -0,0 +1,12 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace').'\\Resume', + 'middleware' => config('admin.route.middleware'), +], function (Router $router) { + $router->resource('persons', 'IndexController'); + $router->resource('groups', 'GroupController'); +}); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 5f8cc68..c1576d9 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -8,14 +8,15 @@ Route::group([ 'prefix' => config('admin.route.prefix'), 'namespace' => config('admin.route.namespace'), 'middleware' => config('admin.route.middleware'), - 'as' => config('admin.route.prefix') . '.', + 'as' => config('admin.route.prefix').'.', ], function (Router $router) { $router->get('/', 'HomeController@index')->name('home'); }); -require __DIR__ . '/Routes/article.php'; -require __DIR__ . '/Routes/category.php'; -require __DIR__ . '/Routes/link.php'; -require __DIR__ . '/Routes/advert.php'; +require __DIR__.'/Routes/article.php'; +require __DIR__.'/Routes/category.php'; +require __DIR__.'/Routes/link.php'; +require __DIR__.'/Routes/advert.php'; +require __DIR__.'/Routes/resume.php'; diff --git a/app/Helpers/function.php b/app/Helpers/function.php index 389b5e6..e18d8f9 100644 --- a/app/Helpers/function.php +++ b/app/Helpers/function.php @@ -3,6 +3,7 @@ use App\Models\Advert; use App\Models\Category; use App\Models\Article; +use App\Models\Resume; use Encore\Admin\Config\ConfigModel; function getConfigList($name, $take = 8) @@ -41,6 +42,7 @@ function getOneCategory($categoryId, $return = '') /** * Notes: 获取文章分类详情 + * * @Author: 玄尘 * @Date : 2020/9/10 13:21 * @param $categoryId @@ -50,12 +52,12 @@ function getOneCategory($categoryId, $return = '') function getOneArticleBYCate($categoryId, $result = '') { $info = Article::latest('sort') - ->whereHas('categories', function ($q) use ($categoryId) { - $q->where('id', $categoryId); - }) - ->latest('sort') - ->latest('created_at') - ->first(); + ->whereHas('categories', function ($q) use ($categoryId) { + $q->where('id', $categoryId); + }) + ->latest('sort') + ->latest('created_at') + ->first(); if ($info) { if ($result) { @@ -67,49 +69,49 @@ function getOneArticleBYCate($categoryId, $result = '') return ''; } - return new Article; } /** * Notes: 获取分类下的文章 + * * @Author: 玄尘 - * @Date : 2020/9/10 10:05 - * @param $categoryId - * @param int $take - * @param string $mark 显示多少当前分类还是当前分类+子分类 - * @param bool $hasCover + * @Date: 2021/12/1 13:27 + * @param $categoryId + * @param int $take + * @param string $mark + * @param false $hasCover * @param string $order - * @return \App\Models\Article + * @return mixed */ -function getArticlesBYCate($categoryId, $take = 8, $mark = 'one', $hasCover = false, $order = 'desc') +function getArticlesBYCate($categoryId, int $take = 8, string $mark = 'one', $hasCover = false, string $order = 'desc') { if ($mark == 'one') { $articles = Article::where('status', 1) - ->whereHas('categories', function ($q) use ($categoryId) { - $q->where('id', $categoryId); - }) - ->latest('sort') - ->latest('created_at') - ->when($hasCover, function ($q) { - $q->whereNotNull('cover'); - }) - ->take($take) - ->get(); + ->whereHas('categories', function ($q) use ($categoryId) { + $q->where('id', $categoryId); + }) + ->latest('sort') + ->latest('created_at') + ->when($hasCover, function ($q) { + $q->whereNotNull('cover'); + }) + ->take($take) + ->get(); } else { $cate = Category::find($categoryId); $ids = $cate->getAllChildrenId(); $articles = Article::where('status', 1) - ->whereHas('categories', function ($q) use ($ids) { - $q->whereIn('id', $ids); - }) - ->when($hasCover, function ($q) { - $q->whereNotNull('cover'); - }) - ->latest('sort') - ->latest('created_at') - ->take($take) - ->get(); + ->whereHas('categories', function ($q) use ($ids) { + $q->whereIn('id', $ids); + }) + ->when($hasCover, function ($q) { + $q->whereNotNull('cover'); + }) + ->latest('sort') + ->latest('created_at') + ->take($take) + ->get(); } return $articles; @@ -119,9 +121,9 @@ function getArticlesBYCate($categoryId, $take = 8, $mark = 'one', $hasCover = fa function getCateChild($categoryId) { return Category::where('status', 1) - ->where('parent_id', $categoryId) - ->orderBy('order', 'asc') - ->get(); + ->where('parent_id', $categoryId) + ->orderBy('order', 'asc') + ->get(); } //获取顶级分类 @@ -140,9 +142,9 @@ function getTopCate($categoryId) function getOneAdvertByCate($categoryId, $result = '') { $info = Advert::where('category_id', $categoryId) - ->latest('sort') - ->latest() - ->first(); + ->latest('sort') + ->latest() + ->first(); if ($info) { if ($result) { return $info->{$result}; @@ -152,50 +154,57 @@ function getOneAdvertByCate($categoryId, $result = '') } else { return ''; } - - return new Advert; } -function getAdvertsByCate($categoryId, $take = 8) +/** + * Notes: 获取广告 + * + * @Author: 玄尘 + * @Date: 2021/12/1 13:27 + * @param $categoryId + * @param int $take + * @return mixed + */ +function getAdvertsByCate($categoryId, int $take = 8) { return Advert::where('category_id', $categoryId) - ->latest('sort') - ->latest() - ->take($take) - ->get(); + ->latest('sort') + ->latest() + ->take($take) + ->get(); } /** * Notes: 根据分类id 获取文章 + * * @Author: 玄尘 * @Date : 2021/5/21 9:45 - * @param int $take + * @param int $take * @param false $hasCover * @return mixed */ -function getArticlesByCateIds($take = 8, $hasCover = false) +function getArticlesByCateIds(int $take = 8, $hasCover = false) { //分院新闻 媒体报道 科研动态 交流合作 党建文化 专题学习 $ids = [7, 17, 8, 5, 12, 30]; - $articles = Article::query()->where('status', 1) - ->whereHas('categories', function ($q) use ($ids) { - $q->whereIn('id', $ids); - }) - ->latest('sort') - ->latest('created_at') - ->when($hasCover, function ($q) { - $q->whereNotNull('cover')->orWhere('cover', '<>', ''); - }) - ->take($take) - ->get(); - - return $articles; + return Article::query()->where('status', 1) + ->whereHas('categories', function ($q) use ($ids) { + $q->whereIn('id', $ids); + }) + ->latest('sort') + ->latest('created_at') + ->when($hasCover, function ($q) { + $q->whereNotNull('cover')->orWhere('cover', '<>', ''); + }) + ->take($take) + ->get(); } /** * Notes: 获取推荐文章 + * * @Author: 玄尘 * @Date : 2021/4/16 13:31 * @param $postion @@ -203,12 +212,27 @@ function getArticlesByCateIds($take = 8, $hasCover = false) */ function getArticlesByPosition($postion) { - $articles = Article::ofPosition($postion) - ->latest('sort') - ->latest('created_at') - ->take(5) - ->get(); - - return $articles; + return Article::ofPosition($postion) + ->latest('sort') + ->latest('created_at') + ->take(5) + ->get(); +} + +/** + * Notes: 根据分类获取简历 + * + * @Author: 玄尘 + * @Date: 2021/12/1 13:28 + * @param $category_id + * @param int $take + */ +function getResumesByCate($category_id, $take = 8) +{ + return Resume::query() + ->where('status', 1) + ->where('category_id', $category_id) + ->take($take) + ->get(); } diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index 59d343a..3b6aa89 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -10,23 +10,30 @@ class CategoryController extends Controller /** * 显示分类 + * * @param Category $category [description] * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View [type] [description] */ public function index(Category $category) { if ($category->type == Category::TYPE_SHOW && $category->article_id) { - return redirect("articles/" . $category->article_id); + return redirect("articles/".$category->article_id); } else { - $template = 'show'; + $directory = 'category'; + $template = 'show'; if ($category->template) { $template = $category->template; } + + if ($category->type == Category::TYPE_PERSON) { + $directory = 'resume'; + } + $articles = $category->relations(Category::TYPE_ARTICLE) - ->where('status', 1) - ->latest('sort') - ->latest('created_at') - ->paginate(8); + ->where('status', 1) + ->latest('sort') + ->latest('created_at') + ->paginate(8); $parent = $category; if ($category->childrens->isEmpty() && $category->parent) { @@ -35,7 +42,7 @@ class CategoryController extends Controller $advert = Advert::where('category_id', 73)->first(); - return view('category.' . $template, compact('articles', 'category', 'parent', 'advert')); + return view($directory.'.'.$template, compact('articles', 'category', 'parent', 'advert')); } } diff --git a/app/Http/Controllers/ResumeController.php b/app/Http/Controllers/ResumeController.php new file mode 100644 index 0000000..07aaacc --- /dev/null +++ b/app/Http/Controllers/ResumeController.php @@ -0,0 +1,33 @@ +category; + $parent = $category; + if ($category->childrens->isEmpty() && $category->parent) { + $parent = $category->parent; + } + return view('resume.show', compact('resume', 'category','parent')); + + } + + +} diff --git a/app/Models/Category.php b/app/Models/Category.php index 465fd49..b3e3f97 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -14,10 +14,12 @@ class Category extends Model public const TYPE_SHOW = 'show'; public const TYPE_ARTICLE = 'article'; public const TYPE_ADVERT = 'advert'; + public const TYPE_PERSON = 'person'; public const TYPES = [ self::TYPE_ARTICLE => '文章列表', self::TYPE_SHOW => '文章详情', self::TYPE_ADVERT => '图片', + self::TYPE_PERSON => '简历', ]; public function getLinkAttribute() @@ -27,6 +29,7 @@ class Category extends Model /** * 关联的数据 + * * @return [type] [description] */ public function relations() @@ -41,6 +44,9 @@ class Category extends Model case self::TYPE_ADVERT: return $this->hasMany(Advert::class); break; + case self::TYPE_PERSON: + return $this->hasMany(Resume::class); + break; default: return null; } @@ -63,6 +69,7 @@ class Category extends Model /** * Notes: 获取当前分类及子分类ID + * * @Author: * @Date : 2020/4/6 3:12 下午 * @return array diff --git a/app/Models/Resume.php b/app/Models/Resume.php new file mode 100644 index 0000000..c84daa5 --- /dev/null +++ b/app/Models/Resume.php @@ -0,0 +1,65 @@ + 'json' + ]; + + /*** + * Notes: 所属分类 + * + * @Author: 玄尘 + * @Date: 2021/12/1 9:57 + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function category(): BelongsTo + { + return $this->belongsTo(Category::class); + } + + /** + * Notes: 所属科室 + * + * @Author: 玄尘 + * @Date: 2021/12/1 9:58 + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function group(): BelongsTo + { + return $this->belongsTo(ResumeGroup::class); + } + + /** + * Notes: 跳转链接 + * + * @Author: 玄尘 + * @Date: 2021/12/1 13:11 + * @return string + */ + public function getLinkAttribute(): string + { + return route('resume.show', $this); + } + + /** + * Notes: 获取基础数据 + * + * @Author: 玄尘 + * @Date: 2021/12/1 13:11 + * @param $key + * @param string $default + */ + public function getInformation($key, string $default = '') + { + return Arr::get($this->information, $key, $default); + } +} diff --git a/app/Models/ResumeGroup.php b/app/Models/ResumeGroup.php new file mode 100644 index 0000000..9b0f3c0 --- /dev/null +++ b/app/Models/ResumeGroup.php @@ -0,0 +1,8 @@ +app->runningInConsole()) { + if (Schema::hasTable($table)) { + Config::load(); + } } + } } diff --git a/database/migrations/2021_12_01_094854_create_resumes_table.php b/database/migrations/2021_12_01_094854_create_resumes_table.php new file mode 100644 index 0000000..084447f --- /dev/null +++ b/database/migrations/2021_12_01_094854_create_resumes_table.php @@ -0,0 +1,41 @@ +id(); + $table->unsignedBigInteger('category_id')->index(); + $table->unsignedBigInteger('group_id')->index(); + $table->string('name'); + $table->string('cover'); + $table->json('information')->comment('基本信息'); + $table->text('content')->comment('简历'); + $table->string('direction')->comment('研究方向'); + $table->text('outcome')->comment('代表成果'); + $table->text('project')->comment('承担科研项目情况'); + $table->boolean('status')->default(1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('resumes'); + } +} diff --git a/database/migrations/2021_12_01_095540_create_resume_groups_table.php b/database/migrations/2021_12_01_095540_create_resume_groups_table.php new file mode 100644 index 0000000..b19d61d --- /dev/null +++ b/database/migrations/2021_12_01_095540_create_resume_groups_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('name'); + $table->boolean('status')->default(1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('resume_groups'); + } +} diff --git a/resources/views/category/cxtd.blade.php b/resources/views/category/cxtd.blade.php new file mode 100644 index 0000000..92cb958 --- /dev/null +++ b/resources/views/category/cxtd.blade.php @@ -0,0 +1,54 @@ +@extends('layouts.app') + +@section('title', '首页') + +@section('content') + +
+
+
+ @include('category.left') +
+ +
+
+
+ + {{ $category->title }} +
+
+ @if ($articles->isNotEmpty()) + + + {{ $articles->links('layouts.pagination') }} + @else +
+ + 抱歉,暂无数据 +
+ @endif + +
+
+
+
+
+@endsection diff --git a/resources/views/category/list.blade.php b/resources/views/category/list.blade.php index 7b61ecc..2f2eb27 100644 --- a/resources/views/category/list.blade.php +++ b/resources/views/category/list.blade.php @@ -17,8 +17,8 @@ {{ $category->title }} - + {{ $articles->links('layouts.pagination') }} + @else +
+ + 抱歉,暂无数据 +
@endif diff --git a/resources/views/category/rcdw.blade.php b/resources/views/category/rcdw.blade.php index 744e06c..c9c8803 100644 --- a/resources/views/category/rcdw.blade.php +++ b/resources/views/category/rcdw.blade.php @@ -57,10 +57,10 @@
- @if (getArticlesBYCate(28,36)->isNotEmpty()) - @foreach (getArticlesBYCate(28,36) as $article) -
{{ $article->title }} - {{ $article->description }} + @if (getResumesByCate(28,36)->isNotEmpty()) + @foreach (getResumesByCate(28,36) as $resume) +
{{ $resume->name }} + {{ $resume->description }}
@endforeach @endif @@ -80,22 +80,14 @@
    - @if (getArticlesBYCate(29,6)->isNotEmpty()) - @foreach (getArticlesBYCate(29,6) as $article) + @if (getResumesByCate(29,6)->isNotEmpty()) + @foreach (getResumesByCate(29,6) as $resume)
  • - +
    客座教授 -
    {{ $article->title }}
    +
    {{ $resume->name }}
    -
  • @endforeach diff --git a/resources/views/resume/show.blade.php b/resources/views/resume/show.blade.php new file mode 100644 index 0000000..1f736dc --- /dev/null +++ b/resources/views/resume/show.blade.php @@ -0,0 +1,82 @@ +@extends('layouts.app') + +@section('title', '详情') + +@section('content') + + +
    +
    +
    + @include('category.left') +
    + +
    +
    +
    + + {{ $category->title }} +
    +
    +
    +
    +
    {{ $resume->name }}
    +
      + @if($resume->getInformation('duty')) +
    • + 职务:{{ $resume->getInformation('duty') }} +
    • + @endif +
    • + 职称:{{ $resume->getInformation('rank') }} +
    • +
    • + 学历:{{ $resume->getInformation('education') }} +
    • +
    • + 电话:{{ $resume->getInformation('mobile') }} +
    • +
    • + 电子邮件:{{ $resume->getInformation('email') }} +
    • +
    • + 通讯地址:{{ $resume->getInformation('address') }} +
    • +
    +
    +
    + +
    +
    +
    +
    +
    简历
    +
    + {!! $resume->content !!} +
    +
    +
    +
    研究方向
    +
    + {{ $resume->direction }} +
    +
    +
    +
    代表成果
    +
    + {!! $resume->outcome !!} +
    +
    +
    +
    承担科研项目情况
    +
    + {!! $resume->project !!} +
    +
    +
    +
    +
    +
    +
    +
    +@endsection diff --git a/resources/views/resume/tdrc.blade.php b/resources/views/resume/tdrc.blade.php new file mode 100644 index 0000000..7458f75 --- /dev/null +++ b/resources/views/resume/tdrc.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.app') + +@section('title', '首页') + +@section('content') + +
    +
    +
    + @include('category.left') +
    + +
    +
    +
    + + {{ $category->title }} +
    +
    + @if ($articles->isNotEmpty()) + @foreach($articles->groupBy('group_id') as $resumes) +
    +
    + {{ $resumes->first()->group->name }} +
    + +
    + @endforeach + @else +
    + + 抱歉,暂无数据 +
    + @endif +
    +
    +
    +
    +
    +@endsection diff --git a/resources/views/resume/zjzk.blade.php b/resources/views/resume/zjzk.blade.php new file mode 100644 index 0000000..62b1ac0 --- /dev/null +++ b/resources/views/resume/zjzk.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.app') + +@section('title', '首页') + +@section('content') + + +
    +
    +
    + @include('category.left') +
    + +
    +
    +
    + + {{ $category->title }} +
    +
    + @if ($articles->isNotEmpty()) + + + {{ $articles->links('layouts.pagination') }} + @else +
    + + 抱歉,暂无数据 +
    + @endif +
    +
    +
    +
    +
    +@endsection diff --git a/routes/web.php b/routes/web.php index 7249906..2bd5dce 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,7 +16,10 @@ Route::get('search', 'ArticleController@search')->name('article.search'); Route::get('category/{category}', 'CategoryController@index')->name('category.show'); +Route::get('resume/{resume}', 'ResumeController@show')->name('resume.show'); + //以下为导入数据 +Route::get('test', 'TestController@index'); Route::get('test/set_category', 'TestController@set_category'); Route::get('test/set_article', 'TestController@set_article'); Route::get('test/set_cate_article', 'TestController@setCateArticle');