feat: Implement Career Management Module
- Created CareerController for handling career-related CRUD operations. - Added Career model with necessary attributes and relationships. - Created migration for careers table with relevant fields. - Developed views for creating, editing, and listing careers. - Implemented DataTables for career listing with action buttons. - Added routes for career management and integrated with sidebar. - Created client-side career detail template and updated career listing page. - Added helper functions to fetch active careers for display.
This commit is contained in:
137
Modules/CCMS/app/Http/Controllers/CareerController.php
Normal file
137
Modules/CCMS/app/Http/Controllers/CareerController.php
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\CCMS\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Modules\CCMS\Models\Career;
|
||||||
|
use Yajra\DataTables\Facades\DataTables;
|
||||||
|
|
||||||
|
class CareerController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
if (request()->ajax()) {
|
||||||
|
$model = Career::query()->orderBy('order');
|
||||||
|
return DataTables::eloquent($model)
|
||||||
|
->addIndexColumn()
|
||||||
|
->setRowClass('tableRow')
|
||||||
|
->editColumn('status', function (Career $career) {
|
||||||
|
$status = $career->status ? 'Published' : 'Draft';
|
||||||
|
$color = $career->status ? 'text-success' : 'text-danger';
|
||||||
|
return "<p class='{$color}'>{$status}</p>";
|
||||||
|
})
|
||||||
|
->addColumn('action', 'ccms::career.datatable.action')
|
||||||
|
->rawColumns(['status', 'action'])
|
||||||
|
->toJson();
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('ccms::career.index', [
|
||||||
|
'title' => 'Career List',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$careerOptions = Career::where('status', 1)->pluck('job_title', 'id');
|
||||||
|
return view('ccms::career.create', [
|
||||||
|
'title' => 'Create Career',
|
||||||
|
'editable' => false,
|
||||||
|
'careerOptions' => $careerOptions
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$maxOrder = Career::max('order');
|
||||||
|
$order = $maxOrder ? ++$maxOrder : 1;
|
||||||
|
|
||||||
|
$request->mergeIfMissing([
|
||||||
|
'slug' => Str::slug($request->title),
|
||||||
|
// 'order' => $order,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Career::create($request->all());
|
||||||
|
flash()->success("Career has been created!");
|
||||||
|
return redirect()->route('career.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the specified resource.
|
||||||
|
*/
|
||||||
|
public function show($id)
|
||||||
|
{
|
||||||
|
return view('ccms::show');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$careerOptions = Career::where('status', 1)->pluck('job_title', 'id');
|
||||||
|
|
||||||
|
$career = Career::findOrFail($id);
|
||||||
|
return view('ccms::career.edit', [
|
||||||
|
'title' => 'Edit Career',
|
||||||
|
'editable' => true,
|
||||||
|
'career' => $career,
|
||||||
|
'careerOptions' => $careerOptions
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, $id)
|
||||||
|
{
|
||||||
|
$request->merge([
|
||||||
|
'slug' => Str::slug($request->title),
|
||||||
|
]);
|
||||||
|
$validated = $request->validate([]);
|
||||||
|
$career = Career::findOrFail($id);
|
||||||
|
$career->update($request->all());
|
||||||
|
flash()->success("Career has been updated.");
|
||||||
|
return redirect()->back();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy($id)
|
||||||
|
{
|
||||||
|
$career = Career::findOrFail($id);
|
||||||
|
$career->delete();
|
||||||
|
return response()->json(['status' => 200, 'message' => "Career has been deleted."], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reorder(Request $request)
|
||||||
|
{
|
||||||
|
$careers = Career::all();
|
||||||
|
foreach ($careers as $career) {
|
||||||
|
foreach ($request->order as $order) {
|
||||||
|
if ($order['id'] == $career->id) {
|
||||||
|
$career->update(['order' => $order['position']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response(['status' => true, 'message' => 'Reordered successfully'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toggle($id)
|
||||||
|
{
|
||||||
|
$career = Career::findOrFail($id);
|
||||||
|
$career->update(['status' => !$career->status]);
|
||||||
|
return response(['status' => 200, 'message' => 'Toggled successfully'], 200);
|
||||||
|
}
|
||||||
|
}
|
97
Modules/CCMS/app/Models/Career.php
Normal file
97
Modules/CCMS/app/Models/Career.php
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\CCMS\Models;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Traits\CreatedUpdatedBy;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Modules\CCMS\Traits\UpdateCustomFields;
|
||||||
|
use Modules\Document\Models\Document;
|
||||||
|
use App\Traits\AddToDocumentCollection;
|
||||||
|
|
||||||
|
class Career extends Model
|
||||||
|
{
|
||||||
|
use HasFactory, UpdateCustomFields, AddToDocumentCollection, CreatedUpdatedBy;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'department',
|
||||||
|
'job_title',
|
||||||
|
'job_description',
|
||||||
|
'job_requirements',
|
||||||
|
'salary_range',
|
||||||
|
'location',
|
||||||
|
'position',
|
||||||
|
'start_date',
|
||||||
|
'end_date',
|
||||||
|
'status',
|
||||||
|
'createdby',
|
||||||
|
'updatedby',
|
||||||
|
'order',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected function casts(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'custom' => 'array',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function images(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: function ($value) {
|
||||||
|
if (empty($value)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = explode(',', $value);
|
||||||
|
return array_map(fn($part) => asset(trim($part)), $parts);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function image(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => asset($value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function banner(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => asset($value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function sidebarImage(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => asset($value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function iconImage(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: fn($value) => asset($value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function children()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Career::class, 'parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function parent()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Career::class, 'parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function documents()
|
||||||
|
{
|
||||||
|
return $this->morphMany(Document::class, 'documentable');
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('careers', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('department')->nullable();
|
||||||
|
$table->string('job_title')->nullable();
|
||||||
|
$table->text('job_description')->nullable();
|
||||||
|
$table->text('job_requirements')->nullable();
|
||||||
|
$table->string('salary_range')->nullable();
|
||||||
|
$table->string('location')->nullable();
|
||||||
|
$table->string('position')->nullable();
|
||||||
|
$table->date('start_date')->nullable();
|
||||||
|
$table->date('end_date')->nullable();
|
||||||
|
$table->integer('status')->default(1);
|
||||||
|
$table->integer('createdby')->unsigned()->nullable();
|
||||||
|
$table->integer('updatedby')->unsigned()->nullable();
|
||||||
|
$table->integer('order')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('careers');
|
||||||
|
}
|
||||||
|
};
|
16
Modules/CCMS/resources/views/career/create.blade.php
Normal file
16
Modules/CCMS/resources/views/career/create.blade.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
@section('content')
|
||||||
|
<x-dashboard.breadcumb :title="$title" />
|
||||||
|
<div class="container-fluid">
|
||||||
|
@if ($errors->any())
|
||||||
|
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||||
|
@endif
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
{{ html()->form('POST')->route('career.store')->class('needs-validation')->attributes(['novalidate'])->open() }}
|
||||||
|
@include('ccms::career.partials._form')
|
||||||
|
{{ html()->form()->close() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
@@ -0,0 +1,12 @@
|
|||||||
|
<div class="hstack flex-wrap gap-3">
|
||||||
|
<a href="{{ route('career.edit', $id) }}" data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="bottom" data-bs-title="Edit" class="link-success fs-15 edit-item-btn"><i
|
||||||
|
class=" ri-edit-2-line"></i></a>
|
||||||
|
|
||||||
|
<a data-link="{{ route('career.toggle', $id) }}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Toggle" data-status="{{ $status == 1 ? 'Draft' : 'Published' }}"
|
||||||
|
class="link-info fs-15 toggle-item"><i class="{{ $status == 1 ? 'ri-toggle-line' : 'ri-toggle-fill' }}"></i></a>
|
||||||
|
|
||||||
|
<a href="javascript:void(0);" data-link="{{ route('career.destroy', $id) }}" class="link-danger fs-15 remove-item"
|
||||||
|
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Delete"><i class="ri-delete-bin-6-line"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
16
Modules/CCMS/resources/views/career/edit.blade.php
Normal file
16
Modules/CCMS/resources/views/career/edit.blade.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
@section('content')
|
||||||
|
<x-dashboard.breadcumb :title="$title" />
|
||||||
|
<div class="container-fluid">
|
||||||
|
@if ($errors->any())
|
||||||
|
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||||
|
@endif
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
{{ html()->modelForm($career, 'PUT')->route('career.update', $career->id)->class('needs-validation')->attributes(['novalidate'])->open() }}
|
||||||
|
@include('ccms::career.partials._form')
|
||||||
|
{{ html()->closeModelForm() }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
51
Modules/CCMS/resources/views/career/index.blade.php
Normal file
51
Modules/CCMS/resources/views/career/index.blade.php
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container-fluid">
|
||||||
|
<x-dashboard.breadcumb :title="$title" />
|
||||||
|
@if ($errors->any())
|
||||||
|
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header d-flex align-items-center justify-content-between">
|
||||||
|
<h5 class="card-title mb-0">{{ $title }}</h5>
|
||||||
|
<a href="{{ route('career.create') }}" class="btn btn-primary waves-effect waves-light text-white"><i
|
||||||
|
class="ri-add-line align-middle"></i> Create</a>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
@php
|
||||||
|
$columns = [
|
||||||
|
[
|
||||||
|
'title' => 'S.N',
|
||||||
|
'data' => 'DT_RowIndex',
|
||||||
|
'name' => 'DT_RowIndex',
|
||||||
|
'orderable' => false,
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => false,
|
||||||
|
],
|
||||||
|
['title' => 'Job Title', 'data' => 'job_title', 'name' => 'job_title'],
|
||||||
|
['title' => 'Start Date', 'data' => 'start_date', 'name' => 'start_date'],
|
||||||
|
['title' => 'End Date', 'data' => 'end_date', 'name' => 'end_date'],
|
||||||
|
['title' => 'Department', 'data' => 'department', 'name' => 'department'],
|
||||||
|
['title' => 'Location', 'data' => 'location', 'name' => 'location'],
|
||||||
|
['title' => 'Position', 'data' => 'position', 'name' => 'position'],
|
||||||
|
['title' => 'Salary', 'data' => 'salary_range', 'name' => 'salary_range'],
|
||||||
|
['title' => 'Status', 'data' => 'status', 'name' => 'status'],
|
||||||
|
[
|
||||||
|
'title' => 'Action',
|
||||||
|
'data' => 'action',
|
||||||
|
'orderable' => false,
|
||||||
|
'searchable' => false,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
@endphp
|
||||||
|
<x-data-table-script :route="route('career.index')" :reorder="route('career.reorder')" :columns="$columns" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
220
Modules/CCMS/resources/views/career/partials/_form.blade.php
Normal file
220
Modules/CCMS/resources/views/career/partials/_form.blade.php
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-8">
|
||||||
|
<div class="card h-auto">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row gy-3">
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Job Title')->class('form-label')->for('job_title') }}
|
||||||
|
{{ html()->span('*')->class('text-danger') }}
|
||||||
|
{{ html()->text('job_title')->class('form-control')->placeholder('Enter Job Title')->required(true) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Department')->class('form-label')->for('department') }}
|
||||||
|
{{ html()->span('*')->class('text-danger') }}
|
||||||
|
{{ html()->text('department')->class('form-control')->placeholder('Enter Department')->required(true) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Vacancy Start Date')->class('form-label') }}
|
||||||
|
<div class="input-group">
|
||||||
|
{{ html()->text('start_date')->class('form-control')->id('career-start-date')->placeholder('Vacancy Start Date')->attributes([
|
||||||
|
'data-provider' => 'flatpickr',
|
||||||
|
'data-date-format' => 'Y-m-d',
|
||||||
|
'data-enable-time' => '',
|
||||||
|
])->required() }}
|
||||||
|
<span class="input-group-text"><i class="ri-calendar-career-line"></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Vacancy End Date')->class('form-label') }}
|
||||||
|
<div class="input-group">
|
||||||
|
{{ html()->text('end_date')->class('form-control')->id('career-end-date')->placeholder('Vacancy End Date')->attributes([
|
||||||
|
'data-provider' => 'flatpickr',
|
||||||
|
'data-date-format' => 'Y-m-d',
|
||||||
|
'data-enable-time' => '',
|
||||||
|
]) }}
|
||||||
|
<span class="input-group-text"><i class="ri-calendar-career-line"></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Salary Range')->class('form-label')->for('salary_range') }}
|
||||||
|
{{ html()->span('*')->class('text-danger') }}
|
||||||
|
{{ html()->text('salary_range')->class('form-control')->placeholder('Enter Salary Range')->required(true) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ html()->label('Location')->class('form-label')->for('location') }}
|
||||||
|
{{ html()->span('*')->class('text-danger') }}
|
||||||
|
{{ html()->text('location')->class('form-control')->placeholder('Enter location')->required(true) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12">
|
||||||
|
{{ html()->label('Position')->class('form-label')->for('position') }}
|
||||||
|
{{ html()->span('*')->class('text-danger') }}
|
||||||
|
{{ html()->text('position')->class('form-control')->placeholder('Enter Position (e.g. Fresher, Intermidiate, Senior)')->required(true) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12">
|
||||||
|
{{ html()->label('Job Description')->class('form-label')->for('job_description') }}
|
||||||
|
{{ html()->textarea('job_description')->class('form-control')->placeholder('Enter Job Description (JD)')->rows(5) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12">
|
||||||
|
{{ html()->label('Job Requirements')->class('form-label')->for('job_requirements') }}
|
||||||
|
{{ html()->textarea('job_requirements')->class('form-control ckeditor-classic')->placeholder('Enter Job Requirements') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- <x-ccms::custom-form-field :data="$career->custom ?? []" /> --}}
|
||||||
|
|
||||||
|
<div class="card meta-section">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">Meta</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12 col-sm-12">
|
||||||
|
{{ html()->label('Meta Title')->class('form-label')->for('meta_title') }}
|
||||||
|
{{ html()->text('meta_title')->class('form-control mb-3')->placeholder('Meta Title') }}
|
||||||
|
</div>
|
||||||
|
<div class="col-xl-12 col-sm-12">
|
||||||
|
{{ html()->label('Meta Keywords')->class('form-label')->for('meta_keywords') }}
|
||||||
|
{{ html()->textarea('meta_keywords')->class('form-control mb-3')->placeholder('Meta Keywords') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-12 col-sm-12">
|
||||||
|
{{ html()->label('Meta Description')->class('form-label')->for('meta_description') }}
|
||||||
|
{{ html()->textarea('meta_description')->class('form-control mb-3')->placeholder('Meta wire:Description')->rows(3) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">
|
||||||
|
Published
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
{{ html()->label('Status')->class('form-label visually-hidden')->for('status') }}
|
||||||
|
{{ html()->select('status', config('constants.page_status_options'))->class('form-select choices-select') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<x-form-buttons :href="route('career.index')" :label="isset($career) ? 'Update' : 'Create'" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">
|
||||||
|
Page Attributes
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
{{ html()->label('Parent Event')->class('form-label')->for('parent_id') }}
|
||||||
|
{{ html()->select('parent_id', $careerOptions ?? [])->value($career->parent_id ?? old('parent_id'))->class('form-select choices-select')->placeholder('Select') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card media-gallery-section">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">
|
||||||
|
Icon
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="mb-3">
|
||||||
|
{{ html()->label('Icon')->class('form-label')->for('icon_class') }}
|
||||||
|
{{ html()->text('icon_class')->class('form-control')->placeholder('Icon class') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ html()->label('Icon Image')->class('form-label')->for('icon_image') }}
|
||||||
|
<x-image-input :data="$editable ? $career->getRawOriginal('icon_image') : null" id="icon_image" name="icon_image" :editable="$editable" :multiple=false />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card featured-image-section">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">
|
||||||
|
Featured Image
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="mb-3">
|
||||||
|
{{ html()->label('Featured')->class('form-label')->for('image') }}
|
||||||
|
<x-image-input :data="$editable ? $career->getRawOriginal('image') : null" id="image" name="image" :editable="$editable" :multiple=false />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ html()->label('Banner')->class('form-label')->for('banner') }}
|
||||||
|
<x-image-input :data="$editable ? $career->getRawOriginal('banner') : null" id="banner" name="banner" :editable="$editable" :multiple=false />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card media-gallery-section">
|
||||||
|
<div class="card-header">
|
||||||
|
<h6 class="card-title mb-0 fs-14">
|
||||||
|
Media Gallery
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<x-image-input :editable="$editable" id="images" name="images" :data="$editable ? $career->getRawOriginal('images') : null" :multiple="true"
|
||||||
|
label="Select Images" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card sidebar-section">
|
||||||
|
<div class="card-header d-flex jusitfy-content-between align-items-center">
|
||||||
|
<h6 class="card-title mb-0 fs-14">Sidebar</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row gy-3">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Title')->class('form-label')->for('sidebar_title') }}
|
||||||
|
{{ html()->text('sidebar_title')->class('form-control') }}
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Content')->class('form-label')->for('sidebar_content') }}
|
||||||
|
{{ html()->textarea('sidebar_content')->class('form-control')->placeholder('Short Content (optional)')->rows(3) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Image')->class('form-label')->for('sidebar_content') }}
|
||||||
|
<x-image-input :data="$editable ? $career->getRawOriginal('sidebar_image') : null" id="sidebar_image" name="sidebar_image" :editable="$editable"
|
||||||
|
:multiple=false />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card button-section">
|
||||||
|
<div class="card-header d-flex jusitfy-content-between align-items-center">
|
||||||
|
<h6 class="card-title mb-0 fs-14">Button</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row gy-3">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Text')->class('form-label')->for('button_text') }}
|
||||||
|
{{ html()->text('button_text')->class('form-control') }}
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Link')->class('form-label')->for('button_url') }}
|
||||||
|
{{ html()->text('button_url')->class('form-control')->placeholder('Button Link') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12">
|
||||||
|
{{ html()->label('Target')->class('form-label')->for('button_target') }}
|
||||||
|
{{ html()->select('button_target', config('constants.redirect_options'))->class('form-select choices-select') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@@ -27,7 +27,6 @@
|
|||||||
'sortable' => false,
|
'sortable' => false,
|
||||||
],
|
],
|
||||||
['title' => 'Image', 'data' => 'image', 'name' => 'image'],
|
['title' => 'Image', 'data' => 'image', 'name' => 'image'],
|
||||||
['title' => 'Parent', 'data' => 'parent_id', 'name' => 'parent_ids'],
|
|
||||||
['title' => 'Title', 'data' => 'title', 'name' => 'title'],
|
['title' => 'Title', 'data' => 'title', 'name' => 'title'],
|
||||||
['title' => 'Start Date', 'data' => 'start_date', 'name' => 'start_date'],
|
['title' => 'Start Date', 'data' => 'start_date', 'name' => 'start_date'],
|
||||||
['title' => 'End Date', 'data' => 'end_date', 'name' => 'end_date'],
|
['title' => 'End Date', 'data' => 'end_date', 'name' => 'end_date'],
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Modules\CCMS\Http\Controllers\BlogController;
|
use Modules\CCMS\Http\Controllers\BlogController;
|
||||||
use Modules\CCMS\Http\Controllers\BranchController;
|
use Modules\CCMS\Http\Controllers\BranchController;
|
||||||
|
use Modules\CCMS\Http\Controllers\CareerController;
|
||||||
use Modules\CCMS\Http\Controllers\CategoryController;
|
use Modules\CCMS\Http\Controllers\CategoryController;
|
||||||
use Modules\CCMS\Http\Controllers\CounselorController;
|
use Modules\CCMS\Http\Controllers\CounselorController;
|
||||||
use Modules\CCMS\Http\Controllers\CounterController;
|
use Modules\CCMS\Http\Controllers\CounterController;
|
||||||
@@ -90,6 +91,10 @@ Route::group(['middleware' => ['web', 'auth', 'permission'], 'prefix' => 'admin/
|
|||||||
Route::get('event/toggle/{id}', [EventController::class, 'toggle'])->name('event.toggle');
|
Route::get('event/toggle/{id}', [EventController::class, 'toggle'])->name('event.toggle');
|
||||||
Route::resource('event', EventController::class)->names('event');
|
Route::resource('event', EventController::class)->names('event');
|
||||||
|
|
||||||
|
Route::post('career/reorder', [CareerController::class, 'reorder'])->name('career.reorder');
|
||||||
|
Route::get('career/toggle/{id}', [CareerController::class, 'toggle'])->name('career.toggle');
|
||||||
|
Route::resource('career', CareerController::class)->names('career');
|
||||||
|
|
||||||
Route::post('branch/reorder', [BranchController::class, 'reorder'])->name('branch.reorder');
|
Route::post('branch/reorder', [BranchController::class, 'reorder'])->name('branch.reorder');
|
||||||
Route::get('branch/toggle/{id}', [BranchController::class, 'toggle'])->name('branch.toggle');
|
Route::get('branch/toggle/{id}', [BranchController::class, 'toggle'])->name('branch.toggle');
|
||||||
Route::resource('branch', BranchController::class)->names('branch');
|
Route::resource('branch', BranchController::class)->names('branch');
|
||||||
|
@@ -25,6 +25,8 @@ Route::post('enquiry', [EnquiryController::class, 'store'])->name('enquiry.store
|
|||||||
Route::post('franchise', [FranchiseController::class, 'store'])->name('franchise.store');
|
Route::post('franchise', [FranchiseController::class, 'store'])->name('franchise.store');
|
||||||
Route::post('newsletter', [NewsletterController::class, 'store'])->name('newsletter.store');
|
Route::post('newsletter', [NewsletterController::class, 'store'])->name('newsletter.store');
|
||||||
|
|
||||||
|
Route::get('career/{id}', [WebsiteController::class, 'careerSingle'])->name('career.single');
|
||||||
|
|
||||||
Route::get('getCost', [WebsiteController::class, 'getCost'])->name('cost.getCost');
|
Route::get('getCost', [WebsiteController::class, 'getCost'])->name('cost.getCost');
|
||||||
Route::get('/thankyou', [WebsiteController::class, 'thankyouPage'])->name('thankyou');
|
Route::get('/thankyou', [WebsiteController::class, 'thankyouPage'])->name('thankyou');
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Modules\CCMS\Models\Blog;
|
use Modules\CCMS\Models\Blog;
|
||||||
|
use Modules\CCMS\Models\Career;
|
||||||
use Modules\CCMS\Models\Category;
|
use Modules\CCMS\Models\Category;
|
||||||
use Modules\CCMS\Models\Counter;
|
use Modules\CCMS\Models\Counter;
|
||||||
use Modules\CCMS\Models\Country;
|
use Modules\CCMS\Models\Country;
|
||||||
@@ -151,6 +152,18 @@ function getServices($limit = null, $order = 'desc')
|
|||||||
->get();
|
->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getCareers($limit = null, $order = 'desc')
|
||||||
|
{
|
||||||
|
return Career::query()
|
||||||
|
->where('status', 1)
|
||||||
|
->orderBy('order', $order)
|
||||||
|
->when($limit, function ($query) use ($limit) {
|
||||||
|
$query->limit($limit);
|
||||||
|
})
|
||||||
|
->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function previousEvents($limit = null, $order = 'desc')
|
function previousEvents($limit = null, $order = 'desc')
|
||||||
{
|
{
|
||||||
return Event::query()
|
return Event::query()
|
||||||
|
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\View;
|
use Illuminate\Support\Facades\View;
|
||||||
use Modules\CCMS\Models\Blog;
|
use Modules\CCMS\Models\Blog;
|
||||||
|
use Modules\CCMS\Models\Career;
|
||||||
use Modules\CCMS\Models\Country;
|
use Modules\CCMS\Models\Country;
|
||||||
use Modules\CCMS\Models\Institution;
|
use Modules\CCMS\Models\Institution;
|
||||||
use Modules\CCMS\Models\Page;
|
use Modules\CCMS\Models\Page;
|
||||||
@@ -130,6 +131,13 @@ class WebsiteController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function careerSingle($id)
|
||||||
|
{
|
||||||
|
$data['career'] = Career::findorFail($id);
|
||||||
|
|
||||||
|
return view("client.$this->path.pages.career-detail-template", $data);
|
||||||
|
}
|
||||||
|
|
||||||
public function testSingle($alias)
|
public function testSingle($alias)
|
||||||
{
|
{
|
||||||
$testPreparations = $data["page"] = Test::where('status', 1)
|
$testPreparations = $data["page"] = Test::where('status', 1)
|
||||||
@@ -181,6 +189,7 @@ class WebsiteController extends Controller
|
|||||||
$teams = getTeams(limit: null, order: 'asc');
|
$teams = getTeams(limit: null, order: 'asc');
|
||||||
$blogs = getBlogs(limit: null, order: 'asc');
|
$blogs = getBlogs(limit: null, order: 'asc');
|
||||||
$galleriesCSR = getPageWithChildrenBySlug(parent: $parent, slug: 'gallery', limit: null, order: 'asc');
|
$galleriesCSR = getPageWithChildrenBySlug(parent: $parent, slug: 'gallery', limit: null, order: 'asc');
|
||||||
|
$careers = getCareers(limit: null, order: 'asc');
|
||||||
if (!$page) {
|
if (!$page) {
|
||||||
return view('client.raffles.errors.404');
|
return view('client.raffles.errors.404');
|
||||||
}
|
}
|
||||||
@@ -191,7 +200,7 @@ class WebsiteController extends Controller
|
|||||||
return view('client.raffles.errors.404');
|
return view('client.raffles.errors.404');
|
||||||
}
|
}
|
||||||
|
|
||||||
return view($path, ['page' => $page, 'teams' => $teams, 'blogs' => $blogs, 'galleriesCSR' => $galleriesCSR]);
|
return view($path, ['page' => $page, 'teams' => $teams, 'blogs' => $blogs, 'galleriesCSR' => $galleriesCSR], ['careers' => $careers]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fallback()
|
public function fallback()
|
||||||
|
@@ -149,6 +149,14 @@ return [
|
|||||||
'can' => ['team.index'],
|
'can' => ['team.index'],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
'text' => 'Career',
|
||||||
|
'url' => 'admin/career',
|
||||||
|
'icon' => 'ri-feedback-line',
|
||||||
|
'module' => 'CCMS',
|
||||||
|
'can' => ['career.index'],
|
||||||
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
'text' => 'Blog',
|
'text' => 'Blog',
|
||||||
'icon' => 'ri-newspaper-line',
|
'icon' => 'ri-newspaper-line',
|
||||||
|
@@ -0,0 +1,141 @@
|
|||||||
|
@extends('client.raffles.layouts.app')
|
||||||
|
@section('content')
|
||||||
|
<div class="p-20 ">
|
||||||
|
<div class="h-175 rounded-10 bg-after relative">
|
||||||
|
<img class="h-full w-full rounded-30 object-cover"
|
||||||
|
src="{{ asset('raffles/assets/images/general/about-banner.png') }}" alt="">
|
||||||
|
<div
|
||||||
|
class="flex justify-center flex-col text-center items-center w-70percent mx-auto absolute top-20percent left-15percent z-30">
|
||||||
|
<h2 class="md:text-40 text-94 text-white">Career-Details</h2>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<section class="pt-60 career-details ">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col col-12">
|
||||||
|
<div class="relative line-through">
|
||||||
|
<div class="position ">
|
||||||
|
<h4 class="text-brand">Available Position</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col col col-12 ">
|
||||||
|
|
||||||
|
<div class="d-flex gap-5 pt-5">
|
||||||
|
<div class="career-img">
|
||||||
|
<img class="w-full" src="assets/images/icons/team.svg" alt="">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-brand">{{ $career->job_title }}</h3>
|
||||||
|
<p>{{ setting('location') }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="py-5 ">
|
||||||
|
|
||||||
|
<div class="flex gap-10">
|
||||||
|
<div class="text-12">
|
||||||
|
<i class="fa-solid fa-money-bill-wave"></i> {{ $career->salary_range }}
|
||||||
|
</div>
|
||||||
|
<div class="text-12">
|
||||||
|
<i class="fa-solid fa-location-dot"></i> {{ $career->location }}
|
||||||
|
</div>
|
||||||
|
<div class="text-12">
|
||||||
|
<i class="fa-solid fa-briefcase"></i> {{ $career->position }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-between">
|
||||||
|
<div class="col col-12 col-md-6 pt-5">
|
||||||
|
<h5>Job Description</h5>
|
||||||
|
<p>{{ $career->job_description }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h6 class="py-3">Key Responsibilities (JD):</h6>
|
||||||
|
{{-- <ul>
|
||||||
|
<li>1. Creative Design Development: Conceptualize and create high-quality designs for
|
||||||
|
digital and print media, including websites, social media, brochures, and promotional
|
||||||
|
materials.</li>
|
||||||
|
<li>2. BTL Marketing Designs: Design engaging visual materials for BTL marketing campaigns,
|
||||||
|
such as posters, banners, and standees, ensuring alignment with brand guidelines.</li>
|
||||||
|
|
||||||
|
<li>3. Layout and Page Design: Plan and design page layouts for print media such as
|
||||||
|
brochures, pamphlets, and magazines, ensuring an eye-catching yet functional structure.
|
||||||
|
</li>
|
||||||
|
<li>4. Brand Identity Development: Work on visual brand identity projects, creating logos,
|
||||||
|
color schemes, and overall brand guidelines that resonate with target audiences.</li>
|
||||||
|
<li>5. Client Collaboration: Collaborate with clients to understand their design
|
||||||
|
requirements and deliver solutions that meet their objectives.</li>
|
||||||
|
<li>6. Cross-Departmental Collaboration: Work closely with the marketing and production
|
||||||
|
teams to deliver cohesive and integrated creative projects.</li>
|
||||||
|
<li>7. Design for Digital Campaigns: Create digital assets for social media, websites, and
|
||||||
|
online campaigns, ensuring visual consistency across all platforms.</li>
|
||||||
|
<li>8. Quality Control: Ensure the highest standards of quality and consistency across all
|
||||||
|
creative outputs, adhering to timelines and project goals.</li>
|
||||||
|
<li>9. Software Proficiency: Utilize design tools such as Adobe Creative Suite (Photoshop,
|
||||||
|
Illustrator, InDesign, etc.) to produce creative assets with speed and precision.</li>
|
||||||
|
<li>10. Mentorship and Team Leadership: Guide and mentor junior designers, providing
|
||||||
|
feedback and support to ensure continuous growth and improvement within the team.</li>
|
||||||
|
</ul> --}}
|
||||||
|
{!! $career->job_requirements !!}
|
||||||
|
</div>
|
||||||
|
<div class="col col-12 col-md-5">
|
||||||
|
<div class=" form ">
|
||||||
|
<h2 class="text-26 mb-30 text-brand text-center">Quick Apply</h2>
|
||||||
|
<form action="">
|
||||||
|
<div class="flex gap-20">
|
||||||
|
<input class="w-full mb-30 rounded-6 py-15 text-14 px-10" type="text"
|
||||||
|
name="" id="" placeholder="First Name">
|
||||||
|
<input class="w-full mb-30 rounded-6 py-15 text-14 px-10" type="text"
|
||||||
|
name="" id="" placeholder="Last Name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex gap-20">
|
||||||
|
<input class="w-full mb-30 rounded-6 py-15 text-14 px-10" type="email"
|
||||||
|
name="" id="" placeholder="Email">
|
||||||
|
|
||||||
|
<input class="w-full mb-30 rounded-6 py-15 text-14 px-10" type="tel"
|
||||||
|
name="" id="" placeholder="Phone Number">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<input class="w-full mb-30 rounded-6 py-15 text-14 px-10" type="text" name=""
|
||||||
|
id="" placeholder="Your Qualification">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<textarea class="w-full mb-10 rounded-6 py-15 text-14 px-10" name="" id=""
|
||||||
|
placeholder="Short description about you"></textarea>
|
||||||
|
<label class="text-16" for="">Please Upload Your CV</label>
|
||||||
|
<input class="mb-20" type="file" name="" id="">
|
||||||
|
<button
|
||||||
|
class="button-hover px-30 py-10 bg-sec text-white rounded-30 text-14 border-0 mt-20 ">Submit</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
@endsection
|
@@ -14,168 +14,30 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="lqd-section pt-40 pb-30">
|
<section class="lqd-section pt-40 pb-30">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row pb-20">
|
<div class="row pb-20">
|
||||||
|
@foreach ($careers as $career)
|
||||||
<div class="col col-sm-6 col-md-4">
|
<div class="col col-sm-6 col-md-4">
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
<a href="{{ route('career.single', $career->id) }}" class="career-box flex flex-col gap-20 border">
|
||||||
<span>
|
<span>
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
||||||
Marketing</h5>
|
{{ $career->department }}</h5>
|
||||||
</span>
|
</span>
|
||||||
|
<h6 class="text-16 font-bols mb-10">{{ $career->job_title }}</h6>
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
<div class="flex items-center gap-10 mb-10">
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
<i class="fa-solid fa-calendar-days text-20"></i>
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
<p class="font-bold text-16 text-black m-0 ">Post Date: {{ $career->created_At }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-10">
|
<div class="mb-10">
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
<h2 class="text-16 font-medium text-gray">{{ $career->job_description }}</h2>
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
</div>
|
||||||
<button>View Detail</button>
|
<button>View Detail</button>
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@endforeach
|
||||||
<div class="col col-sm-6 col-md-4">
|
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
|
||||||
<span>
|
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
|
||||||
Marketing</h5>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-10">
|
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
|
||||||
<button>View Detail</button>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col col-sm-6 col-md-4">
|
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
|
||||||
<span>
|
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
|
||||||
Marketing</h5>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-10">
|
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
|
||||||
<button>View Detail</button>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col col-sm-6 col-md-4">
|
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
|
||||||
<span>
|
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
|
||||||
Marketing</h5>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-10">
|
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
|
||||||
<button>View Detail</button>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col col-sm-6 col-md-4">
|
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
|
||||||
<span>
|
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
|
||||||
Marketing</h5>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-10">
|
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
|
||||||
<button>View Detail</button>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col col-sm-6 col-md-4">
|
|
||||||
<a href="career-detail.php" class="career-box flex flex-col gap-20 border">
|
|
||||||
<span>
|
|
||||||
|
|
||||||
<h5 class="text-white bg-sec px-20 py-10 rounded-10 text-18 mb-10 ml-0 inline-block">
|
|
||||||
Marketing</h5>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h6 class="text-16 font-bols mb-10">Seo Executive</h6>
|
|
||||||
<div class="flex items-center gap-10 mb-10">
|
|
||||||
<i class="fa-solid fa-calendar-days text-20"></i>
|
|
||||||
<p class="font-bold text-16 text-black m-0 ">Post Date: 2025/03/05</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-10">
|
|
||||||
<h2 class="text-16 font-medium text-gray">Join our team as an SEO Executive and help
|
|
||||||
improve our website's visibility and search
|
|
||||||
engine rankings. The ideal candidate will be…</h2>
|
|
||||||
</div>
|
|
||||||
<button>View Detail</button>
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
@endsection
|
@endsection
|
||||||
|
Reference in New Issue
Block a user