114 lines
6.9 KiB
PHP
114 lines
6.9 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('content')
|
|
<div class="max-w-3xl mx-auto space-y-6">
|
|
<!-- Page Header -->
|
|
<div class="flex items-center gap-4">
|
|
<a href="{{ isset($task) ? route('tasks.show', $task) : route('tasks.index') }}" class="p-2 text-gray-500 hover:text-gray-900 hover:bg-gray-100 rounded-lg transition-colors">
|
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"/></svg>
|
|
</a>
|
|
<h1 class="text-2xl font-bold text-gray-900">
|
|
{{ isset($task) ? __('task.edit_task') : __('task.create_task') }}
|
|
</h1>
|
|
</div>
|
|
|
|
<!-- Form -->
|
|
<form method="POST" action="{{ isset($task) ? route('tasks.update', $task) : route('tasks.store') }}" class="bg-white rounded-xl border border-gray-200 p-6 space-y-5">
|
|
@csrf
|
|
@if(isset($task))
|
|
@method('PUT')
|
|
@endif
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-5">
|
|
<!-- Title -->
|
|
<div class="md:col-span-2">
|
|
<label for="title" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.title') }} <span class="text-red-500">*</span></label>
|
|
<input type="text" id="title" name="title" value="{{ old('title', $task->title ?? '') }}"
|
|
class="w-full px-3 py-2 border {{ $errors->has('title') ? 'border-red-500' : 'border-gray-300' }} rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500"
|
|
required>
|
|
@error('title')<p class="mt-1 text-xs text-red-500">{{ $message }}</p>@enderror
|
|
</div>
|
|
|
|
<!-- Project -->
|
|
<div>
|
|
<label for="project_id" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.project') }} <span class="text-red-500">*</span></label>
|
|
<select id="project_id" name="project_id" class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500" required>
|
|
<option value="">{{ __('common.select') }}</option>
|
|
@foreach($projects as $project)
|
|
<option value="{{ $project->id }}" {{ old('project_id', $task->project_id ?? $preselectedProject ?? '') == $project->id ? 'selected' : '' }}>{{ $project->name }}</option>
|
|
@endforeach
|
|
</select>
|
|
@error('project_id')<p class="mt-1 text-xs text-red-500">{{ $message }}</p>@enderror
|
|
</div>
|
|
|
|
<!-- Assignee -->
|
|
<div>
|
|
<label for="assignee_id" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.assignee') }}</label>
|
|
<select id="assignee_id" name="assignee_id" class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500">
|
|
<option value="">{{ __('common.select') }}</option>
|
|
@foreach($users as $user)
|
|
<option value="{{ $user->id }}" {{ old('assignee_id', $task->assignee_id ?? '') == $user->id ? 'selected' : '' }}>{{ $user->name }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Status -->
|
|
<div>
|
|
<label for="status" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.status') }}</label>
|
|
<select id="status" name="status" class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500">
|
|
@foreach($statuses as $status)
|
|
<option value="{{ $status }}" {{ old('status', $task->status ?? 'pending') === $status ? 'selected' : '' }}>{{ __('task.status_' . $status) }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Priority -->
|
|
<div>
|
|
<label for="priority" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.priority') }}</label>
|
|
<select id="priority" name="priority" class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500">
|
|
@foreach($priorities as $priority)
|
|
<option value="{{ $priority }}" {{ old('priority', $task->priority ?? 'medium') === $priority ? 'selected' : '' }}>{{ __('task.priority_' . $priority) }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Start Date -->
|
|
<div>
|
|
<label for="start_date" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.start_date') }}</label>
|
|
<x-date-input name="start_date" :value="old('start_date', isset($task) && $task->start_date ? $task->start_date->format('Y-m-d') : '')" />
|
|
</div>
|
|
|
|
<!-- Due Date -->
|
|
<div>
|
|
<label for="due_date" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.due_date') }}</label>
|
|
<x-date-input name="due_date" :value="old('due_date', isset($task) && $task->due_date ? $task->due_date->format('Y-m-d') : '')" />
|
|
</div>
|
|
|
|
<!-- Estimated Hours -->
|
|
<div>
|
|
<label for="estimated_hours" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.estimated_hours') }}</label>
|
|
<input type="number" id="estimated_hours" name="estimated_hours" value="{{ old('estimated_hours', $task->estimated_hours ?? '') }}" min="0"
|
|
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500">
|
|
</div>
|
|
|
|
<!-- Description -->
|
|
<div class="md:col-span-2">
|
|
<label for="description" class="block text-sm font-medium text-gray-700 mb-1">{{ __('task.description') }}</label>
|
|
<textarea id="description" name="description" rows="4"
|
|
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-teal-500 focus:border-teal-500">{{ old('description', $task->description ?? '') }}</textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Actions -->
|
|
<div class="flex items-center justify-end gap-3 pt-4 border-t border-gray-200">
|
|
<a href="{{ isset($task) ? route('tasks.show', $task) : route('tasks.index') }}" class="px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 rounded-lg hover:bg-gray-200 transition-colors">
|
|
{{ __('common.cancel') }}
|
|
</a>
|
|
<button type="submit" class="px-6 py-2 text-sm font-medium text-white bg-teal-600 rounded-lg hover:bg-teal-700 transition-colors">
|
|
{{ isset($task) ? __('common.save_changes') : __('common.create') }}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
@endsection
|