add pause
Tests & Lint & Deploy to Railway / build (2.6.6, 20.x, 8.3) (push) Failing after 3m24s Details

This commit is contained in:
aslan 2024-05-07 10:35:04 +03:00
parent efc0f88061
commit f1b185ba59
24 changed files with 916 additions and 103 deletions

View File

@ -8,60 +8,39 @@ use App\Models\Label;
class LabelController extends Controller class LabelController extends Controller
{ {
/**
* Display a listing of the resource.
*/
public function index() public function index()
{ {
$labels = Label::all(); $labels = Label::all();
return view('admin.labels.index', compact('labels')); return view('admin.labels.index', compact('labels'));
} }
/**
* Show the form for creating a new resource.
*/
public function create() public function create()
{ {
//
} }
/**
* Store a newly created resource in storage.
*/
public function store(StorelabelRequest $request) public function store(StorelabelRequest $request)
{ {
//
} }
/**
* Display the specified resource.
*/
public function show(Label $label) public function show(Label $label)
{ {
//
} }
/**
* Show the form for editing the specified resource.
*/
public function edit(Label $label) public function edit(Label $label)
{ {
//
} }
/**
* Update the specified resource in storage.
*/
public function update(UpdatelabelRequest $request, Label $label) public function update(UpdatelabelRequest $request, Label $label)
{ {
//
} }
/**
* Remove the specified resource from storage.
*/
public function destroy(Label $label) public function destroy(Label $label)
{ {
//
} }
} }

View File

@ -11,16 +11,13 @@ class TaskController extends Controller
{ {
public function index() public function index()
{ {
$label = Label::all(); $tasks = Task::paginate(7);
return view('admin.tasks.index', compact('label')); return view('admin.tasks.index', compact('tasks'));
} }
/**
* Show the form for creating a new resource.
*/
public function create() public function create()
{ {
// return view('admin.tasks.create');
} }
/** /**

View File

@ -4,8 +4,56 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Task extends Model class Task extends Model
{ {
use HasFactory; use HasFactory;
protected $fillable = [
'id',
'name',
'description',
'parent_id',
'status_id',
'department_id',
'created_by_id',
];
public function creator(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by_id');
}
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class);
}
public function status(): BelongsTo
{
return $this->belongsTo(TaskStatus::class);
}
public function labels(): BelongsToMany
{
return $this->belongsToMany(Label::class);
}
public function department(): BelongsTo
{
return $this->belongsTo(Department::class);
}
public function notes(): HasMany
{
return $this->hasMany('App\Models\Note', 'task_id');
}
public function subTasks(): HasMany
{
return $this->hasMany('App\Models\Task', 'parent_id');
}
} }

View File

@ -5,7 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class TaskStatuses extends Model class TaskStatus extends Model
{ {
use HasFactory; use HasFactory;
} }

View File

@ -2,23 +2,18 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
{ {
/**
* Register any application services.
*/
public function register(): void public function register(): void
{ {
//
} }
/**
* Bootstrap any application services.
*/
public function boot(): void public function boot(): void
{ {
// Paginator::useBootstrapFive();
} }
} }

View File

@ -13,7 +13,6 @@ return new class extends Migration
$table->string('name', 255); $table->string('name', 255);
$table->bigInteger('parent_id'); $table->bigInteger('parent_id');
$table->text('description')->nullable(); $table->text('description')->nullable();
$table->string('file', 255)->nullable();
$table->foreignId('status_id')->constrained('task_statuses'); $table->foreignId('status_id')->constrained('task_statuses');
$table->foreignId('department_id')->constrained('departments'); $table->foreignId('department_id')->constrained('departments');
$table->foreignId('created_by_id')->constrained('users'); $table->foreignId('created_by_id')->constrained('users');

View File

@ -8,7 +8,7 @@ return new class extends Migration
{ {
public function up(): void public function up(): void
{ {
Schema::create('user_task', function (Blueprint $table) { Schema::create('task_user', function (Blueprint $table) {
$table->foreignId('task_id')->constrained('tasks'); $table->foreignId('task_id')->constrained('tasks');
$table->foreignId('user_id')->constrained('users'); $table->foreignId('user_id')->constrained('users');
$table->timestamps(); $table->timestamps();
@ -17,6 +17,6 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
Schema::dropIfExists('label_task'); Schema::dropIfExists('task_user');
} }
}; };

View File

@ -0,0 +1,29 @@
<?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('files', function (Blueprint $table) {
$table->id();
$table->string('url', 255);
$table->foreignId('task_id')->constrained('tasks');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('files');
}
};

View File

@ -9,17 +9,24 @@ use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
{ {
/**
* Seed the application's database.
*/
public function run(): void public function run(): void
{ {
// User::factory(10)->create(); User::factory(20)->create();
User::factory()->create([ User::factory()->create([
'name' => 'Test User', 'name' => 'Test User',
'email' => 'test@example.com', 'email' => 'test@example.com',
'password' => Hash::make('password'), 'password' => Hash::make('password'),
]); ]);
$this->call([
DepartmentSeeder::class,
LabelSeeder::class,
TaskStatusSeeder::class,
TaskSeeder::class,
NoteSeeder::class,
LabelTaskSeeder::class,
TaskUserSeeder::class,
]);
} }
} }

View File

@ -13,19 +13,23 @@ class LabelSeeder extends Seeder
{ {
DB::table('labels')->insert([ DB::table('labels')->insert([
[ [
'name' => 'разработка', 'name' => 'ошибка',
'description' => 'Какая-то ошибка в коде или проблема с функциональностью',
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'приказ № 1000', 'name' => 'документация',
'description' => 'Задача которая касается документации',
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'Срочно', 'name' => 'дубликат',
'description' => 'Повтор другой задачи',
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'повышенный приоритет', 'name' => 'доработка',
'description' => 'Новая фича, которую нужно запилить',
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
]); ]);

View File

@ -0,0 +1,156 @@
<?php
namespace Database\Seeders;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class LabelTaskSeeder extends Seeder
{
public function run(): void
{
DB::table('label_task')->insert([
[
'task_id' => 1,
'label_id' => 2,
],
[
'task_id' => 1,
'label_id' => 4,
],
[
'task_id' => 2,
'label_id' => 1,
],
[
'task_id' => 2,
'label_id' => 3,
],
[
'task_id' => 2,
'label_id' => 4,
],
[
'task_id' => 3,
'label_id' => 1,
],
[
'task_id' => 3,
'label_id' => 2,
],
[
'task_id' => 3,
'label_id' => 3,
],
[
'task_id' => 4,
'label_id' => 2,
],
[
'task_id' => 4,
'label_id' => 4,
],
[
'task_id' => 5,
'label_id' => 3,
],
[
'task_id' => 6,
'label_id' => 1,
],
[
'task_id' => 6,
'label_id' => 4,
],
[
'task_id' => 7,
'label_id' => 1,
],
[
'task_id' => 8,
'label_id' => 1,
],
[
'task_id' => 8,
'label_id' => 2,
],
[
'task_id' => 8,
'label_id' => 3,
],
[
'task_id' => 8,
'label_id' => 4,
],
[
'task_id' => 9,
'label_id' => 1,
],
[
'task_id' => 9,
'label_id' => 2,
],
[
'task_id' => 9,
'label_id' => 4,
],
[
'task_id' => 10,
'label_id' => 2,
],
[
'task_id' => 10,
'label_id' => 3,
],
[
'task_id' => 10,
'label_id' => 4,
],
[
'task_id' => 11,
'label_id' => 2,
],
[
'task_id' => 11,
'label_id' => 4,
],
[
'task_id' => 12,
'label_id' => 1,
],
[
'task_id' => 13,
'label_id' => 4,
],
[
'task_id' => 14,
'label_id' => 2,
],
[
'task_id' => 15,
'label_id' => 1,
],
[
'task_id' => 15,
'label_id' => 2,
],
[
'task_id' => 15,
'label_id' => 3,
],
[
'task_id' => 16,
'label_id' => 1,
],
[
'task_id' => 16,
'label_id' => 2,
],
[
'task_id' => 16,
'label_id' => 3,
],
]);
}
}

View File

@ -20,15 +20,24 @@ class NoteSeeder extends Seeder
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'приказ № 1000', 'name' => 'Добавлен исполнитель',
'description' => 'Юзер 2',
'file' => 'file2.pdf',
'task_id' => 1,
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'Срочно', 'name' => 'приказ 255',
'description' => 'обратить внимание',
'file' => 'file3.pdf',
'task_id' => 1,
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
[ [
'name' => 'повышенный приоритет', 'name' => 'работа на выходных',
'description' => 'установка оборудвания',
'file' => 'file4.pdf',
'task_id' => 1,
'created_at' => Carbon::now(), 'created_at' => Carbon::now(),
], ],
]); ]);

View File

@ -2,16 +2,160 @@
namespace Database\Seeders; namespace Database\Seeders;
use Carbon\Carbon;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TaskSeeder extends Seeder class TaskSeeder extends Seeder
{ {
/**
* Run the database seeds.
*/
public function run(): void public function run(): void
{ {
// DB::table('tasks')->insert([
[
'status_id' => 1,
'name' => 'Исправить ошибку в какой-нибудь строке',
'description' => 'Я тут ошибку нашёл, надо бы её исправить и так далее и так далее',
'created_by_id' => 1,
'created_at' => Carbon::now(),
'parent_id' => 0,
'department_id' => 1,
],
[
'status_id' => 2,
'name' => 'Допилить дизайн главной страницы',
'description' => 'Вёрстка поехала в далёкие края. Нужно удалить бутстрап!',
'created_by_id' => 2,
'created_at' => Carbon::now(),
'parent_id' => 0,
'department_id' => 1,
],
[
'status_id' => 3,
'name' => 'Отрефакторить авторизацию',
'description' => 'Выпилить всё легаси, которое найдёшь',
'created_by_id' => 2,
'created_at' => Carbon::now(),
'parent_id' => 0,
'department_id' => 1,
],
[
'status_id' => 4,
'name' => 'Доработать команду подготовки БД',
'description' => 'За одно добавить тестовых данных',
'created_by_id' => 1,
'created_at' => Carbon::now(),
'parent_id' => 0,
'department_id' => 1,
],
[
'status_id' => 1,
'name' => 'Пофиксить вон ту кнопку',
'description' => 'Кажется она не того цвета',
'created_by_id' => 3,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 2,
'name' => 'Исправить поиск',
'description' => 'Не ищет то, что мне хочется',
'created_by_id' => 5,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 3,
'name' => 'Добавить интеграцию с облаками',
'description' => 'Они такие мягкие и пушистые',
'created_by_id' => 7,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 4,
'name' => 'Выпилить лишние зависимости',
'description' => '',
'created_by_id' => 9,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 1,
'name' => 'Запилить сертификаты',
'description' => 'Кому-то же они нужны?',
'created_by_id' => 11,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 2,
'name' => 'Выпилить игру престолов',
'description' => 'Этот сериал никому не нравится! :)',
'created_by_id' => 13,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 4,
'name' => 'Пофиксить спеку во всех репозиториях',
'description' => 'Передать Олегу, чтобы больше не ронял прод',
'created_by_id' => 2,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 1,
'name' => 'Вернуть крошки',
'description' => 'Андрей, это задача для тебя',
'created_by_id' => 4,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 2,
'name' => 'Установить Linux',
'description' => 'Не забыть потестировать',
'created_by_id' => 6,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 3,
'name' => 'Потребовать прибавки к зарплате',
'description' => 'Кризис это не время, чтобы молчать!',
'created_by_id' => 8,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 4,
'name' => 'Добавить поиск по фото',
'description' => 'Только не по моему',
'created_by_id' => 10,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
[
'status_id' => 1,
'name' => 'Съесть еще этих прекрасных французских булочек',
'description' => '',
'created_by_id' => 13,
'created_at' => Carbon::now(),
'parent_id' => 1,
'department_id' => 1,
],
]);
} }
} }

View File

@ -0,0 +1,33 @@
<?php
namespace Database\Seeders;
use Carbon\Carbon;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TaskStatusSeeder extends Seeder
{
public function run(): void
{
DB::table('task_statuses')->insert([
[
'name' => 'Создан',
'created_at' => Carbon::now(),
],
[
'name' => 'В работе',
'created_at' => Carbon::now(),
],
[
'name' => 'На проверке',
'created_at' => Carbon::now(),
],
[
'name' => 'Выполнен',
'created_at' => Carbon::now(),
],
]);
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TaskStatusesSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@ -0,0 +1,155 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TaskUserSeeder extends Seeder
{
public function run(): void
{
DB::table('task_user')->insert([
[
'task_id' => 1,
'user_id' => 2,
],
[
'task_id' => 1,
'user_id' => 4,
],
[
'task_id' => 2,
'user_id' => 1,
],
[
'task_id' => 2,
'user_id' => 3,
],
[
'task_id' => 2,
'user_id' => 4,
],
[
'task_id' => 3,
'user_id' => 1,
],
[
'task_id' => 3,
'user_id' => 2,
],
[
'task_id' => 3,
'user_id' => 3,
],
[
'task_id' => 4,
'user_id' => 2,
],
[
'task_id' => 4,
'user_id' => 4,
],
[
'task_id' => 5,
'user_id' => 3,
],
[
'task_id' => 6,
'user_id' => 1,
],
[
'task_id' => 6,
'user_id' => 4,
],
[
'task_id' => 7,
'user_id' => 1,
],
[
'task_id' => 8,
'user_id' => 1,
],
[
'task_id' => 8,
'user_id' => 2,
],
[
'task_id' => 8,
'user_id' => 3,
],
[
'task_id' => 8,
'user_id' => 4,
],
[
'task_id' => 9,
'user_id' => 1,
],
[
'task_id' => 9,
'user_id' => 2,
],
[
'task_id' => 9,
'user_id' => 4,
],
[
'task_id' => 10,
'user_id' => 2,
],
[
'task_id' => 10,
'user_id' => 3,
],
[
'task_id' => 10,
'user_id' => 4,
],
[
'task_id' => 11,
'user_id' => 2,
],
[
'task_id' => 11,
'user_id' => 4,
],
[
'task_id' => 12,
'user_id' => 1,
],
[
'task_id' => 13,
'user_id' => 4,
],
[
'task_id' => 14,
'user_id' => 2,
],
[
'task_id' => 15,
'user_id' => 1,
],
[
'task_id' => 15,
'user_id' => 2,
],
[
'task_id' => 15,
'user_id' => 3,
],
[
'task_id' => 16,
'user_id' => 1,
],
[
'task_id' => 16,
'user_id' => 2,
],
[
'task_id' => 16,
'user_id' => 3,
],
]);
}
}

253
package-lock.json generated
View File

@ -13,15 +13,16 @@
"devDependencies": { "devDependencies": {
"@popperjs/core": "^2.11.6", "@popperjs/core": "^2.11.6",
"@tailwindcss/forms": "^0.5.2", "@tailwindcss/forms": "^0.5.2",
"@vitejs/plugin-vue": "^5.0.4",
"alpinejs": "^3.4.2", "alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2", "autoprefixer": "^10.4.2",
"axios": "^1.6.4", "axios": "^1.6.4",
"bootstrap": "^5.2.3", "bootstrap": "^5.2.3",
"laravel-vite-plugin": "^1.0", "laravel-vite-plugin": "^1.0.2",
"postcss": "^8.4.31", "postcss": "^8.4.31",
"sass": "^1.56.1", "sass": "^1.56.1",
"tailwindcss": "^3.1.0", "tailwindcss": "^3.1.0",
"vite": "^5.0" "vite": "^5.2.11"
} }
}, },
"node_modules/@alloc/quick-lru": { "node_modules/@alloc/quick-lru": {
@ -36,6 +37,19 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/@babel/parser": {
"version": "7.24.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
"dev": true,
"peer": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@colors/colors": { "node_modules/@colors/colors": {
"version": "1.6.0", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
@ -773,6 +787,101 @@
"resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz",
"integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw=="
}, },
"node_modules/@vitejs/plugin-vue": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz",
"integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==",
"dev": true,
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"peerDependencies": {
"vite": "^5.0.0",
"vue": "^3.2.25"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz",
"integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.24.4",
"@vue/shared": "3.4.26",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-core/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/compiler-dom": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz",
"integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.4.26",
"@vue/shared": "3.4.26"
}
},
"node_modules/@vue/compiler-dom/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/compiler-sfc": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz",
"integrity": "sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.24.4",
"@vue/compiler-core": "3.4.26",
"@vue/compiler-dom": "3.4.26",
"@vue/compiler-ssr": "3.4.26",
"@vue/shared": "3.4.26",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.10",
"postcss": "^8.4.38",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-sfc/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/compiler-ssr": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz",
"integrity": "sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.4.26",
"@vue/shared": "3.4.26"
}
},
"node_modules/@vue/compiler-ssr/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.1.5", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
@ -782,6 +891,74 @@
"@vue/shared": "3.1.5" "@vue/shared": "3.1.5"
} }
}, },
"node_modules/@vue/runtime-core": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.26.tgz",
"integrity": "sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/reactivity": "3.4.26",
"@vue/shared": "3.4.26"
}
},
"node_modules/@vue/runtime-core/node_modules/@vue/reactivity": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.26.tgz",
"integrity": "sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/shared": "3.4.26"
}
},
"node_modules/@vue/runtime-core/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/runtime-dom": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz",
"integrity": "sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/runtime-core": "3.4.26",
"@vue/shared": "3.4.26",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/runtime-dom/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/server-renderer": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.26.tgz",
"integrity": "sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-ssr": "3.4.26",
"@vue/shared": "3.4.26"
},
"peerDependencies": {
"vue": "3.4.26"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.1.5", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
@ -1176,6 +1353,13 @@
"cssmin": "bin/cssmin" "cssmin": "bin/cssmin"
} }
}, },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"dev": true,
"peer": true
},
"node_modules/delayed-stream": { "node_modules/delayed-stream": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@ -1220,6 +1404,19 @@
"resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
"integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
}, },
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.20.2", "version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
@ -1267,6 +1464,13 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true,
"peer": true
},
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@ -1666,6 +1870,16 @@
"node": "14 || >=16.14" "node": "14 || >=16.14"
} }
}, },
"node_modules/magic-string": {
"version": "0.30.10",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"dev": true,
"peer": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
}
},
"node_modules/makeerror": { "node_modules/makeerror": {
"version": "1.0.12", "version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@ -5042,9 +5256,9 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.2.10", "version": "5.2.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz",
"integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.20.1", "esbuild": "^0.20.1",
@ -5106,6 +5320,35 @@
"picomatch": "^2.3.1" "picomatch": "^2.3.1"
} }
}, },
"node_modules/vue": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.4.26.tgz",
"integrity": "sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.4.26",
"@vue/compiler-sfc": "3.4.26",
"@vue/runtime-dom": "3.4.26",
"@vue/server-renderer": "3.4.26",
"@vue/shared": "3.4.26"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/vue/node_modules/@vue/shared": {
"version": "3.4.26",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==",
"dev": true,
"peer": true
},
"node_modules/walker": { "node_modules/walker": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",

View File

@ -7,16 +7,15 @@
}, },
"devDependencies": { "devDependencies": {
"@popperjs/core": "^2.11.6", "@popperjs/core": "^2.11.6",
"@tailwindcss/forms": "^0.5.2", "@vitejs/plugin-vue": "^5.0.4",
"alpinejs": "^3.4.2", "alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2", "autoprefixer": "^10.4.2",
"axios": "^1.6.4", "axios": "^1.6.4",
"bootstrap": "^5.2.3", "bootstrap": "^5.2.3",
"laravel-vite-plugin": "^1.0", "laravel-vite-plugin": "^1.0.2",
"postcss": "^8.4.31", "postcss": "^8.4.31",
"sass": "^1.56.1", "sass": "^1.56.1",
"tailwindcss": "^3.1.0", "vite": "^5.2.11"
"vite": "^5.0"
}, },
"dependencies": { "dependencies": {
"bootstrap-icons": "^1.11.3", "bootstrap-icons": "^1.11.3",

View File

@ -1,3 +1,3 @@
@tailwind base; /*@tailwind base;*/
@tailwind components; /*@tailwind components;*/
@tailwind utilities; /*@tailwind utilities;*/

View File

@ -6,8 +6,3 @@
// Bootstrap // Bootstrap
@import 'bootstrap/scss/bootstrap'; @import 'bootstrap/scss/bootstrap';
/* Fonts */ @import url('https://fonts.bunny.net/css?family=Nunito');
/* Variables */ @import 'variables';
/* Bootstrap */ @import 'bootstrap/scss/bootstrap';
@import 'bootstrap-icons/font/bootstrap-icons.css';

View File

@ -0,0 +1,25 @@
@extends('layouts.layout')
@section('content')
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">отдел</th>
<th scope="col">Задача</th>
<th scope="col">Статус</th>
<th scope="col">Назначил</th>
<th scope="col">Исполнители</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
</tbody>
</table>
@endsection

View File

@ -5,7 +5,7 @@
<thead> <thead>
<tr> <tr>
<th scope="col">#</th> <th scope="col">#</th>
<th scope="col">отдел</th> <th scope="col">Отдел</th>
<th scope="col">Задача</th> <th scope="col">Задача</th>
<th scope="col">Статус</th> <th scope="col">Статус</th>
<th scope="col">Назначил</th> <th scope="col">Назначил</th>
@ -13,13 +13,27 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> @foreach($tasks as $task)
<th scope="row">1</th> <tr>
<td>Mark</td> <th scope="row">{{ $task->id }}</th>
<td>Otto</td> <td>{{ $task->department->name }}</td>
<td>@mdo</td> <td>{{ $task->name }}
</tr> <br>
@foreach($task->labels as $label)
<span class="badge rounded-pill text-bg-warning">{{ $label->name }}</span>
@endforeach
</td>
<td>{{ $task->status->name }}</td>
<td>{{ $task->creator->name }}</td>
<td>
@foreach($task->users as $user)
{{ $user->name }}<br>
@endforeach
</td>
</tr>
@endforeach
</tbody> </tbody>
</table>
</table>
{{ $tasks->links() }}
@endsection @endsection

View File

@ -6,7 +6,6 @@ export default defineConfig({
laravel({ laravel({
input: [ input: [
'resources/sass/app.scss', 'resources/sass/app.scss',
'resources/css/app.css',
'resources/js/app.js', 'resources/js/app.js',
], ],
refresh: true, refresh: true,