diff --git a/app/Http/Controllers/LabelController.php b/app/Http/Controllers/LabelController.php index 9043ccf..4253a5f 100644 --- a/app/Http/Controllers/LabelController.php +++ b/app/Http/Controllers/LabelController.php @@ -8,60 +8,39 @@ use App\Models\Label; class LabelController extends Controller { - /** - * Display a listing of the resource. - */ public function index() { $labels = Label::all(); return view('admin.labels.index', compact('labels')); } - /** - * Show the form for creating a new resource. - */ public function create() { - // + } - /** - * Store a newly created resource in storage. - */ public function store(StorelabelRequest $request) { - // + } - /** - * Display the specified resource. - */ public function show(Label $label) { - // + } - /** - * Show the form for editing the specified resource. - */ public function edit(Label $label) { - // + } - /** - * Update the specified resource in storage. - */ public function update(UpdatelabelRequest $request, Label $label) { - // + } - /** - * Remove the specified resource from storage. - */ public function destroy(Label $label) { - // + } } diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index 72ea87c..df748d9 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -11,16 +11,13 @@ class TaskController extends Controller { public function index() { - $label = Label::all(); - return view('admin.tasks.index', compact('label')); + $tasks = Task::paginate(7); + return view('admin.tasks.index', compact('tasks')); } - /** - * Show the form for creating a new resource. - */ public function create() { - // + return view('admin.tasks.create'); } /** diff --git a/app/Models/Task.php b/app/Models/Task.php index 5458207..6f3ebff 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -4,8 +4,56 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; 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 { 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'); + } } diff --git a/app/Models/TaskStatuses.php b/app/Models/TaskStatus.php similarity index 81% rename from app/Models/TaskStatuses.php rename to app/Models/TaskStatus.php index 629717c..3f811fd 100644 --- a/app/Models/TaskStatuses.php +++ b/app/Models/TaskStatus.php @@ -5,7 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class TaskStatuses extends Model +class TaskStatus extends Model { use HasFactory; } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..ebedcd9 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,23 +2,18 @@ namespace App\Providers; +use Illuminate\Pagination\Paginator; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { - /** - * Register any application services. - */ public function register(): void { - // + } - /** - * Bootstrap any application services. - */ public function boot(): void { - // + Paginator::useBootstrapFive(); } } diff --git a/database/migrations/2024_04_27_121447_create_tasks_table.php b/database/migrations/2024_04_27_121447_create_tasks_table.php index 13149e0..52dd30a 100644 --- a/database/migrations/2024_04_27_121447_create_tasks_table.php +++ b/database/migrations/2024_04_27_121447_create_tasks_table.php @@ -13,7 +13,6 @@ return new class extends Migration $table->string('name', 255); $table->bigInteger('parent_id'); $table->text('description')->nullable(); - $table->string('file', 255)->nullable(); $table->foreignId('status_id')->constrained('task_statuses'); $table->foreignId('department_id')->constrained('departments'); $table->foreignId('created_by_id')->constrained('users'); diff --git a/database/migrations/2024_04_27_121448_create_user_task_table.php b/database/migrations/2024_04_27_121448_create_user_task_table.php index e15dcec..4eb8409 100644 --- a/database/migrations/2024_04_27_121448_create_user_task_table.php +++ b/database/migrations/2024_04_27_121448_create_user_task_table.php @@ -8,7 +8,7 @@ return new class extends Migration { 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('user_id')->constrained('users'); $table->timestamps(); @@ -17,6 +17,6 @@ return new class extends Migration public function down(): void { - Schema::dropIfExists('label_task'); + Schema::dropIfExists('task_user'); } }; diff --git a/database/migrations/2024_05_06_071114_create_files_table.php b/database/migrations/2024_05_06_071114_create_files_table.php new file mode 100644 index 0000000..53996ab --- /dev/null +++ b/database/migrations/2024_05_06_071114_create_files_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('url', 255); + $table->foreignId('task_id')->constrained('tasks'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('files'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4867042..cfd6e08 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -9,17 +9,24 @@ use Illuminate\Support\Facades\Hash; class DatabaseSeeder extends Seeder { - /** - * Seed the application's database. - */ public function run(): void { - // User::factory(10)->create(); + User::factory(20)->create(); User::factory()->create([ 'name' => 'Test User', 'email' => 'test@example.com', 'password' => Hash::make('password'), ]); + + $this->call([ + DepartmentSeeder::class, + LabelSeeder::class, + TaskStatusSeeder::class, + TaskSeeder::class, + NoteSeeder::class, + LabelTaskSeeder::class, + TaskUserSeeder::class, + ]); } } diff --git a/database/seeders/LabelSeeder.php b/database/seeders/LabelSeeder.php index ff5ccef..60b70e5 100644 --- a/database/seeders/LabelSeeder.php +++ b/database/seeders/LabelSeeder.php @@ -13,19 +13,23 @@ class LabelSeeder extends Seeder { DB::table('labels')->insert([ [ - 'name' => 'разработка', + 'name' => 'ошибка', + 'description' => 'Какая-то ошибка в коде или проблема с функциональностью', 'created_at' => Carbon::now(), ], [ - 'name' => 'приказ № 1000', + 'name' => 'документация', + 'description' => 'Задача которая касается документации', 'created_at' => Carbon::now(), ], [ - 'name' => 'Срочно', + 'name' => 'дубликат', + 'description' => 'Повтор другой задачи', 'created_at' => Carbon::now(), ], [ - 'name' => 'повышенный приоритет', + 'name' => 'доработка', + 'description' => 'Новая фича, которую нужно запилить', 'created_at' => Carbon::now(), ], ]); diff --git a/database/seeders/LabelTaskSeeder.php b/database/seeders/LabelTaskSeeder.php new file mode 100644 index 0000000..3f7adfb --- /dev/null +++ b/database/seeders/LabelTaskSeeder.php @@ -0,0 +1,156 @@ +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, + ], + ]); + } +} diff --git a/database/seeders/NoteSeeder.php b/database/seeders/NoteSeeder.php index cb6d581..0edc522 100644 --- a/database/seeders/NoteSeeder.php +++ b/database/seeders/NoteSeeder.php @@ -20,15 +20,24 @@ class NoteSeeder extends Seeder 'created_at' => Carbon::now(), ], [ - 'name' => 'приказ № 1000', + 'name' => 'Добавлен исполнитель', + 'description' => 'Юзер 2', + 'file' => 'file2.pdf', + 'task_id' => 1, 'created_at' => Carbon::now(), ], [ - 'name' => 'Срочно', + 'name' => 'приказ 255', + 'description' => 'обратить внимание', + 'file' => 'file3.pdf', + 'task_id' => 1, 'created_at' => Carbon::now(), ], [ - 'name' => 'повышенный приоритет', + 'name' => 'работа на выходных', + 'description' => 'установка оборудвания', + 'file' => 'file4.pdf', + 'task_id' => 1, 'created_at' => Carbon::now(), ], ]); diff --git a/database/seeders/TaskSeeder.php b/database/seeders/TaskSeeder.php index f4fd228..871092d 100644 --- a/database/seeders/TaskSeeder.php +++ b/database/seeders/TaskSeeder.php @@ -2,16 +2,160 @@ namespace Database\Seeders; +use Carbon\Carbon; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\DB; class TaskSeeder extends Seeder { - /** - * Run the database seeds. - */ 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, + ], + ]); } } diff --git a/database/seeders/TaskStatusSeeder.php b/database/seeders/TaskStatusSeeder.php new file mode 100644 index 0000000..fe65638 --- /dev/null +++ b/database/seeders/TaskStatusSeeder.php @@ -0,0 +1,33 @@ +insert([ + [ + 'name' => 'Создан', + 'created_at' => Carbon::now(), + ], + [ + 'name' => 'В работе', + 'created_at' => Carbon::now(), + ], + [ + 'name' => 'На проверке', + 'created_at' => Carbon::now(), + ], + [ + 'name' => 'Выполнен', + 'created_at' => Carbon::now(), + ], + ]); + } +} diff --git a/database/seeders/TaskStatusesSeeder.php b/database/seeders/TaskStatusesSeeder.php deleted file mode 100644 index 7fed7ff..0000000 --- a/database/seeders/TaskStatusesSeeder.php +++ /dev/null @@ -1,17 +0,0 @@ -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, + ], + ]); + } +} diff --git a/package-lock.json b/package-lock.json index 4837dc1..bb71d50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,15 +13,16 @@ "devDependencies": { "@popperjs/core": "^2.11.6", "@tailwindcss/forms": "^0.5.2", + "@vitejs/plugin-vue": "^5.0.4", "alpinejs": "^3.4.2", "autoprefixer": "^10.4.2", "axios": "^1.6.4", "bootstrap": "^5.2.3", - "laravel-vite-plugin": "^1.0", + "laravel-vite-plugin": "^1.0.2", "postcss": "^8.4.31", "sass": "^1.56.1", "tailwindcss": "^3.1.0", - "vite": "^5.0" + "vite": "^5.2.11" } }, "node_modules/@alloc/quick-lru": { @@ -36,6 +37,19 @@ "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": { "version": "1.6.0", "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", "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": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", @@ -782,6 +891,74 @@ "@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": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", @@ -1176,6 +1353,13 @@ "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": { "version": "1.0.0", "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", "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": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -1267,6 +1464,13 @@ "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": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -1666,6 +1870,16 @@ "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": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -5042,9 +5256,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", - "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", "dev": true, "dependencies": { "esbuild": "^0.20.1", @@ -5106,6 +5320,35 @@ "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": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", diff --git a/package.json b/package.json index 581e5ac..db637fc 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,15 @@ }, "devDependencies": { "@popperjs/core": "^2.11.6", - "@tailwindcss/forms": "^0.5.2", + "@vitejs/plugin-vue": "^5.0.4", "alpinejs": "^3.4.2", "autoprefixer": "^10.4.2", "axios": "^1.6.4", "bootstrap": "^5.2.3", - "laravel-vite-plugin": "^1.0", + "laravel-vite-plugin": "^1.0.2", "postcss": "^8.4.31", "sass": "^1.56.1", - "tailwindcss": "^3.1.0", - "vite": "^5.0" + "vite": "^5.2.11" }, "dependencies": { "bootstrap-icons": "^1.11.3", diff --git a/resources/css/app.css b/resources/css/app.css index b5c61c9..4443db6 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,3 +1,3 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +/*@tailwind base;*/ +/*@tailwind components;*/ +/*@tailwind utilities;*/ diff --git a/resources/sass/app.scss b/resources/sass/app.scss index a51c301..1026a0b 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -6,8 +6,3 @@ // 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'; diff --git a/resources/views/admin/labels/create.blade.php b/resources/views/admin/labels/create.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/admin/tasks/create.blade.php b/resources/views/admin/tasks/create.blade.php new file mode 100644 index 0000000..258065b --- /dev/null +++ b/resources/views/admin/tasks/create.blade.php @@ -0,0 +1,25 @@ +@extends('layouts.layout') +@section('content') + + + + + + + + + + + + + + + + + + + + +
#отделЗадачаСтатусНазначилИсполнители
1MarkOtto@mdo
+ +@endsection diff --git a/resources/views/admin/tasks/index.blade.php b/resources/views/admin/tasks/index.blade.php index 258065b..ef192b0 100644 --- a/resources/views/admin/tasks/index.blade.php +++ b/resources/views/admin/tasks/index.blade.php @@ -5,7 +5,7 @@ # - отдел + Отдел Задача Статус Назначил @@ -13,13 +13,27 @@ - - 1 - Mark - Otto - @mdo - + @foreach($tasks as $task) + + {{ $task->id }} + {{ $task->department->name }} + {{ $task->name }} +
+ @foreach($task->labels as $label) + {{ $label->name }} + @endforeach + + {{ $task->status->name }} + {{ $task->creator->name }} + + @foreach($task->users as $user) + {{ $user->name }}
+ @endforeach + + + @endforeach - + + {{ $tasks->links() }} @endsection diff --git a/vite.config.js b/vite.config.js index 06f0efb..dbbf333 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,7 +6,6 @@ export default defineConfig({ laravel({ input: [ 'resources/sass/app.scss', - 'resources/css/app.css', 'resources/js/app.js', ], refresh: true,