👁 查看:_form.blade.php
路径:/home/boguraj1/.trash/_form.blade.php
大小:12.9 KB · 修改:2026-07-23 16:56:14 · 权限:0644 · 可写
<div class="row g-4">
    <div class="col-lg-8">
        {{-- BASIC INFO --}}
        <div class="card mb-4">
            <div class="card-header">Basic Information</div>
            <div class="card-body p-4">
                <div class="mb-3">
                    <label class="form-label">Product Name <span class="text-danger">*</span></label>
                    <input type="text" name="name" class="form-control @error('name') is-invalid @enderror"
                        value="{{ old('name', $product->name ?? '') }}" required placeholder="Product name">
                    @error('name')<div class="invalid-feedback">{{ $message }}</div>@enderror
                </div>
                <div class="mb-3">
                    <label class="form-label">Slug</label>
                    <input type="text" name="slug" class="form-control" value="{{ old('slug', $product->slug ?? '') }}" placeholder="auto-generated">
                </div>
                <div class="mb-3">
                    <label class="form-label">Short Description</label>
                    <textarea name="short_description" rows="2" class="form-control" placeholder="Brief product summary...">{{ old('short_description', $product->short_description ?? '') }}</textarea>
                </div>
                <div class="mb-3">
                    <label class="form-label">Full Description</label>
                    <textarea name="description" rows="6" class="form-control" placeholder="Full product description...">{{ old('description', $product->description ?? '') }}</textarea>
                </div>
            </div>
        </div>

        {{-- PRICING --}}
        <div class="card mb-4">
            <div class="card-header">Pricing</div>
            <div class="card-body p-4">
                <div class="row g-3">
                    <div class="col-sm-4">
                        <label class="form-label">Regular Price (৳) <span class="text-danger">*</span></label>
                        <input type="number" name="regular_price" step="0.01" min="0" class="form-control @error('regular_price') is-invalid @enderror"
                            value="{{ old('regular_price', $product->regular_price ?? '') }}" required>
                        @error('regular_price')<div class="invalid-feedback">{{ $message }}</div>@enderror
                    </div>
                    <div class="col-sm-4">
                        <label class="form-label">Sale Price (৳)</label>
                        <input type="number" name="sale_price" step="0.01" min="0" class="form-control"
                            value="{{ old('sale_price', $product->sale_price ?? '') }}" placeholder="Leave empty if no sale">
                    </div>
                    <div class="col-sm-4">
                        <label class="form-label">Offer Text</label>
                        <input type="text" name="offer_text" class="form-control" placeholder="e.g. Save 20% today!"
                            value="{{ old('offer_text', $product->offer_text ?? '') }}">
                    </div>
                </div>
            </div>
        </div>

        {{-- SHIPPING --}}
        <div class="card mb-4">
            <div class="card-header"><i class="bi bi-truck me-1"></i>Shipping Charge <small class="text-muted">(খালি রাখলে Global Settings এর চার্জ প্রযোজ্য হবে)</small></div>
            <div class="card-body p-4">
                <div class="row g-3">
                    <div class="col-sm-6">
                        <label class="form-label"><i class="bi bi-geo-alt-fill me-1 text-success"></i>Inside Dhaka (৳)</label>
                        <div class="input-group">
                            <span class="input-group-text">৳</span>
                            <input type="number" name="shipping_inside_dhaka" min="0" class="form-control"
                                value="{{ old('shipping_inside_dhaka', $product->shipping_inside_dhaka ?? '') }}"
                                placeholder="Global settings হতে নেবে">
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <label class="form-label"><i class="bi bi-geo-alt me-1 text-danger"></i>Outside Dhaka (৳)</label>
                        <div class="input-group">
                            <span class="input-group-text">৳</span>
                            <input type="number" name="shipping_outside_dhaka" min="0" class="form-control"
                                value="{{ old('shipping_outside_dhaka', $product->shipping_outside_dhaka ?? '') }}"
                                placeholder="Global settings হতে নেবে">
                        </div>
                    </div>
                </div>
                <div class="mt-2">
                    <small class="text-muted"><i class="bi bi-info-circle me-1"></i>০ (শূন্য) লিখলে Free Shipping হবে। খালি রাখলে Settings এর Default চার্জ apply হবে।</small>
                </div>
            </div>
        </div>

        {{-- GALLERY --}}
        <div class="card mb-4">
            <div class="card-header">Product Gallery</div>
            <div class="card-body p-4">
                @if(isset($product) && $product->images->count() > 0)
                <div class="d-flex flex-wrap gap-2 mb-3">
                    @foreach($product->images as $img)
                    <div class="position-relative">
                        <img src="{{ $img->image_url }}" style="width:80px;height:80px;object-fit:cover;border-radius:8px" alt="">
                        <button type="button" class="btn btn-danger btn-sm rounded-circle p-0" style="position:absolute;top:-6px;right:-6px;width:22px;height:22px;font-size:11px"
                            onclick="quickDelete('{{ route('admin.products.images.delete', $img) }}', 'Remove image?')">
                            <i class="bi bi-x"></i>
                        </button>
                    </div>
                    @endforeach
                </div>
                @endif
                <input type="file" name="images[]" multiple class="form-control" accept="image/*">
                <small class="text-muted">You can select multiple images. Max 4MB each.</small>
            </div>
        </div>

        {{-- VARIATIONS --}}
        <div class="card">
            <div class="card-header d-flex justify-content-between align-items-center">
                <span>Variations <small class="text-muted">(Size, Color, Weight, etc.)</small></span>
                <button type="button" class="btn btn-sm btn-outline-danger" onclick="addVariation()">+ Add Variation</button>
            </div>
            <div class="card-body p-4">
                @if(isset($product) && $product->variations->count() > 0)
                <div class="mb-3">
                    <label class="form-label text-muted">Existing Variations</label>
                    @foreach($product->variations as $v)
                    <div class="d-flex align-items-center gap-2 mb-2 p-2 bg-light rounded">
                        <span class="badge bg-secondary">{{ $v->type }}</span>
                        <span>{{ $v->value }}</span>
                        @if($v->price_adjustment != 0)
                        <span class="text-muted">+৳{{ $v->price_adjustment }}</span>
                        @endif
                        <span class="text-muted ms-auto">Stock: {{ $v->stock }}</span>
                        <button type="button" class="btn btn-sm btn-outline-danger py-0 px-1 ms-2"
                            onclick="quickDelete('{{ route('admin.products.variations.delete', $v) }}', 'Remove variation?')"><i class="bi bi-x"></i></button>
                    </div>
                    @endforeach
                </div>
                @endif
                <div id="variationRows"></div>
            </div>
        </div>
    </div>

    <div class="col-lg-4">
        {{-- THUMBNAIL --}}
        <div class="card mb-4">
            <div class="card-header">Thumbnail Image</div>
            <div class="card-body p-4">
                @if(isset($product) && $product->thumbnail)
                <img src="{{ $product->thumbnail_url }}" class="w-100 rounded mb-2" style="object-fit:cover;height:180px" alt="">
                @endif
                <input type="file" name="thumbnail" class="form-control" accept="image/*">
            </div>
        </div>

        {{-- ORGANISATION --}}
        <div class="card mb-4">
            <div class="card-header">Organisation</div>
            <div class="card-body p-4">
                <div class="mb-3">
                    <label class="form-label">Category</label>
                    <select name="category_id" class="form-select">
                        <option value="">— None —</option>
                        @foreach($categories as $cat)
                        <option value="{{ $cat->id }}" {{ old('category_id', $product->category_id ?? '') == $cat->id ? 'selected' : '' }}>{{ $cat->name }}</option>
                        @endforeach
                    </select>
                </div>
                <div class="mb-3">
                    <label class="form-label">Tags</label>
                    <div style="max-height:180px;overflow-y:auto;border:1px solid #e0e0e0;border-radius:8px;padding:10px">
                        @foreach($tags as $tag)
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="tags[]" value="{{ $tag->id }}" id="tag_{{ $tag->id }}"
                                {{ in_array($tag->id, old('tags', isset($product) ? $product->tags->pluck('id')->toArray() : [])) ? 'checked' : '' }}>
                            <label class="form-check-label" for="tag_{{ $tag->id }}">{{ $tag->name }}</label>
                        </div>
                        @endforeach
                    </div>
                </div>
                <div class="mb-3">
                    <label class="form-label">SKU</label>
                    <input type="text" name="sku" class="form-control" value="{{ old('sku', $product->sku ?? '') }}" placeholder="auto-generated">
                </div>
                <div class="mb-3">
                    <label class="form-label">Stock Quantity <span class="text-danger">*</span></label>
                    <input type="number" name="stock" min="0" class="form-control @error('stock') is-invalid @enderror"
                        value="{{ old('stock', $product->stock ?? 0) }}" required>
                    @error('stock')<div class="invalid-feedback">{{ $message }}</div>@enderror
                </div>
                <div class="form-check form-switch mb-2">
                    <input class="form-check-input" type="checkbox" name="status" id="status" value="1"
                        {{ old('status', $product->status ?? true) ? 'checked' : '' }}>
                    <label class="form-check-label" for="status">Active (visible on site)</label>
                </div>
                <div class="form-check form-switch">
                    <input class="form-check-input" type="checkbox" name="featured" id="featured" value="1"
                        {{ old('featured', $product->featured ?? false) ? 'checked' : '' }}>
                    <label class="form-check-label" for="featured">Featured Product</label>
                </div>
            </div>
        </div>
    </div>
</div>

@section('scripts')
<script>
function quickDelete(url, message) {
    if (!confirm(message || 'Remove this?')) return;
    const form = document.getElementById('quickDeleteForm');
    form.action = url;
    form.submit();
}

let varCount = 0;
function addVariation() {
    const i = varCount++;
    const html = `
    <div class="row g-2 align-items-end mb-2 variation-row">
        <div class="col-sm-3">
            <select name="variation_types[]" class="form-select form-select-sm">
                <option value="size">Size</option>
                <option value="color">Color</option>
                <option value="weight">Weight</option>
                <option value="other">Other</option>
            </select>
        </div>
        <div class="col-sm-3">
            <input type="text" name="variation_values[]" class="form-control form-control-sm" placeholder="e.g. L, Red, 1kg">
        </div>
        <div class="col-sm-3">
            <input type="number" name="variation_prices[]" class="form-control form-control-sm" placeholder="Price ±" step="0.01">
        </div>
        <div class="col-sm-2">
            <input type="number" name="variation_stocks[]" class="form-control form-control-sm" placeholder="Stock" min="0">
        </div>
        <div class="col-sm-1">
            <button type="button" class="btn btn-sm btn-outline-danger" onclick="this.closest('.variation-row').remove()">×</button>
        </div>
    </div>`;
    document.getElementById('variationRows').insertAdjacentHTML('beforeend', html);
}
</script>
@endsection