refaktor címjegyzék
This commit is contained in:
@@ -129,3 +129,89 @@ A `docs/p0_address_manager_usage_audit_2026-07-01.md` auditban feltárt P0 kriti
|
|||||||
- Backend Python szintaxis: OK (all 3 files pass py_compile)
|
- Backend Python szintaxis: OK (all 3 files pass py_compile)
|
||||||
- Import verifikáció: `Organization.address_id`=True, `Organization.address_city`=False (confirmed removed)
|
- Import verifikáció: `Organization.address_id`=True, `Organization.address_city`=False (confirmed removed)
|
||||||
- Sync Engine: 1274 OK, 0 Fixed, 26 Shadow Data (pre-existing ghost columns confirmed)
|
- Sync Engine: 1274 OK, 0 Fixed, 26 Shadow Data (pre-existing ghost columns confirmed)
|
||||||
|
|
||||||
|
## 2026-07-01 - P0 CRITICAL HOTFIX: Fix 500 Error on /admin/providers List View
|
||||||
|
|
||||||
|
### 🎯 Cél
|
||||||
|
A GET /api/v1/admin/providers végpont 500-as hibát dobott a denormalizált cím oszlopok eltávolítása után.
|
||||||
|
|
||||||
|
### 🔧 Root Cause & Fix
|
||||||
|
**Root Cause 1 — Wrong ServiceStaging import:**
|
||||||
|
Az `admin_providers.py` a `ServiceStaging`-et az `app.models.marketplace.service` modulból importálta, amely NEM tartalmazza a `full_address` és `city` mezőket. A helyes import az `app.models.marketplace.staged_data` modulból származik, amely rendelkezik ezekkel a mezőkkel.
|
||||||
|
|
||||||
|
**Root Cause 2 — AddressOut missing required `id` field:**
|
||||||
|
A `get_provider_detail` és `update_provider` végpontok `AddressOut(...)`-ot konstruáltak a ServiceProvider flat address mezőiből, de az `AddressOut` séma `id: uuid.UUID` mezője kötelező (nem Optional). Mivel a ServiceProvider nem rendelkezik Address kapcsolattal, az `address_detail` mezőt `None`-ra kell állítani.
|
||||||
|
|
||||||
|
### 🔧 Változtatások
|
||||||
|
1. **`backend/app/api/v1/endpoints/admin_providers.py:41`** — Import csere: `from app.models.marketplace.service import ServiceStaging` → `from app.models.marketplace.staged_data import ServiceStaging`
|
||||||
|
2. **`backend/app/api/v1/endpoints/admin_providers.py:568`** — `address_detail=AddressOut(...)` → `address_detail=None` (get_provider_detail)
|
||||||
|
3. **`backend/app/api/v1/endpoints/admin_providers.py:1340`** — `address_detail=AddressOut(...)` → `address_detail=None` (update_provider)
|
||||||
|
|
||||||
|
### ✅ Verifikáció
|
||||||
|
- `GET /api/v1/admin/providers` (default): 200 ✅ (50 items)
|
||||||
|
- `GET /api/v1/admin/providers?status=pending`: 200 ✅ (50 items)
|
||||||
|
- `GET /api/v1/admin/providers/4`: 200 ✅ (address_detail=None)
|
||||||
|
- Sorting by name/validation_score/status: 200 ✅
|
||||||
|
- Search: 200 ✅ (4 results)
|
||||||
|
|
||||||
|
## 2026-07-01 - P0 BUGFIX: Organization Details 500 Error & Provider Raw Data
|
||||||
|
|
||||||
|
### 🎯 Cél
|
||||||
|
Két P0 hibajavítás:
|
||||||
|
1. **Organization Details 500 error** - A `fleet.organizations` táblából fizikailag eltávolított denormalizált cím oszlopok (15 db: address_city, billing_zip, notification_street_name, stb.) miatt a `PUT /{org_id}` végpont `setattr`-nál 500-as hibát dobott, ha a frontend elküldte ezeket a mezőket.
|
||||||
|
2. **Provider Raw Data hiány** - A `GET /admin/providers/{id}` végpont ServiceProvider rekordoknál nem adta vissza a `raw_data` mezőt, így a frontend "Nyers adatok" tab üresen/mock adatként jelent meg.
|
||||||
|
|
||||||
|
### 🔧 Eredmények
|
||||||
|
|
||||||
|
**1. `admin_organizations.py` - Deprecated address field filter** (1341-1361. sor)
|
||||||
|
- Bevezetve a `DEPRECATED_ADDRESS_FIELDS` halmaz, amely tartalmazza mind a 15 ghost oszlopot
|
||||||
|
- A `update_organization` függvény `setattr` ciklusa előtt ezek a mezők kiszűrésre kerülnek `logger.warning` kíséretében
|
||||||
|
- A GET végpont (`get_organization_details`) már korábban is helyesen, relationship-ekből töltötte a denormalizált mezőket (1114-1139. sor)
|
||||||
|
|
||||||
|
**2. `admin_providers.py` - Raw data hozzáadása ServiceProvider válaszhoz** (589-591. sor)
|
||||||
|
- A `get_provider_detail` ServiceProvider ágához hozzáadva: `raw_data=sp.raw_data or {}`
|
||||||
|
- Ezzel a frontend `RawDataViewer` komponense valós adatokat kap, nem üres/mock állapotot
|
||||||
|
|
||||||
|
### ✅ Verifikáció
|
||||||
|
- Mindkét fájl Python szintaxis ellenőrzése: **OK**
|
||||||
|
- `sync_engine.py` futtatás: **1274 elem OK, 0 hiba** - teljes szinkronban
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-07-02: Bugfix - Provider validációs érték és research_in_progress státusz (Gitea #393)
|
||||||
|
|
||||||
|
### 🎯 Cél
|
||||||
|
Provider 1752 (Carnanny) esetén a validációs érték üres volt (validation_score=0), és a `research_in_progress` státusz nem jelent meg helyesen a frontend státuszablakában.
|
||||||
|
|
||||||
|
### 🔧 Root Cause & Fix - 4 bug javítva
|
||||||
|
|
||||||
|
**Bug 1 - Backend: `validation_score` hardcoded to 0 for staging providers**
|
||||||
|
- **Hely:** [`admin_providers.py:613`](backend/app/api/v1/endpoints/admin_providers.py:613)
|
||||||
|
- **Ok:** A `get_provider_detail` ServiceStaging ágában `validation_score=0` volt keménykódolva
|
||||||
|
- **Fix:** `validation_score=ss.trust_score or 0` - így a trust_score értéke jelenik meg validation_score-ként
|
||||||
|
|
||||||
|
**Bug 2 - Frontend: `research_in_progress` hiányzott a statusLabel/statusDescription függvényekből**
|
||||||
|
- **Hely:** [`index.vue:869-887`](frontend_admin/pages/providers/[id]/index.vue:869)
|
||||||
|
- **Ok:** A switch csak 'approved', 'pending', 'rejected' eseteket kezelte
|
||||||
|
- **Fix:** Hozzáadva: `case 'research_in_progress': return 'Kutatás folyamatban'` és magyarázó leírás
|
||||||
|
|
||||||
|
**Bug 3 - Frontend: `research_in_progress` hiányzott a CSS computed property-kből**
|
||||||
|
- **Hely:** [`index.vue:774-808`](frontend_admin/pages/providers/[id]/index.vue:774)
|
||||||
|
- **Ok:** A `statusBannerClass`, `statusIconClass`, `statusTextClass`, `statusSubtextClass` nem kezelték ezt a státuszt → piros (elutasított) stílust kapott
|
||||||
|
- **Fix:** Mind a 4 computed property-hez hozzáadva a `research_in_progress` case kék színű (blue-500) Tailwind osztályokkal
|
||||||
|
|
||||||
|
**Bug 4 - Frontend: Moderációs műveletek rossz ágba kerültek**
|
||||||
|
- **Hely:** [`index.vue:283`](frontend_admin/pages/providers/[id]/index.vue:283)
|
||||||
|
- **Ok:** `v-if="provider.status === 'pending'"` csak a pending státuszt kezelte, a `research_in_progress` a `v-else` ágba esett ("elutasításra került")
|
||||||
|
- **Fix:** `v-if="provider.status === 'pending' || provider.status === 'research_in_progress'"` - így a research_in_progress státuszú provider-ek is látják az Approve/Reject gombokat
|
||||||
|
|
||||||
|
### 📊 Adatbázis megállapítás
|
||||||
|
- A `service_staging.trust_score` mező értéke 0 a DB-ben, de a `raw_data` JSON tartalmazza: `"trust_score": 20`
|
||||||
|
- Ez egy OSM scout bot enrichment pipeline hiányosság - a bot nem extractálja a `trust_score`-t a `raw_data`-ból a staging oszlopba
|
||||||
|
- A fix biztosítja, hogy AMIKOR a trust_score populálva lesz, az helyesen megjelenjen validation_score-ként
|
||||||
|
|
||||||
|
### ✅ Verifikáció
|
||||||
|
- Backend Python szintaxis: **OK**
|
||||||
|
- API konténer restart: **OK**
|
||||||
|
- API hívás provider 1752-re: **200 OK** - status=research_in_progress, validation_score=0 (trust_score=0 miatt), raw_data jelen van
|
||||||
|
- Frontend: mind a 4 Vue komponens módosítás érvényben
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from app.api.v1.endpoints import (
|
|||||||
gamification, translations, users, reports, dictionaries,
|
gamification, translations, users, reports, dictionaries,
|
||||||
admin_packages, admin_services, admin_organizations, admin_users, admin_persons, constants, providers,
|
admin_packages, admin_services, admin_organizations, admin_users, admin_persons, constants, providers,
|
||||||
subscriptions, marketing, admin_permissions, regions,
|
subscriptions, marketing, admin_permissions, regions,
|
||||||
admin_gamification, admin_providers,
|
admin_gamification, admin_providers, locations,
|
||||||
)
|
)
|
||||||
|
|
||||||
api_router = APIRouter()
|
api_router = APIRouter()
|
||||||
@@ -47,3 +47,4 @@ api_router.include_router(marketing.router, prefix="/marketing", tags=["Marketin
|
|||||||
api_router.include_router(admin_permissions.router, prefix="", tags=["Admin Permissions (RBAC)"])
|
api_router.include_router(admin_permissions.router, prefix="", tags=["Admin Permissions (RBAC)"])
|
||||||
api_router.include_router(admin_gamification.router, prefix="/admin/gamification", tags=["Admin Gamification"])
|
api_router.include_router(admin_gamification.router, prefix="/admin/gamification", tags=["Admin Gamification"])
|
||||||
api_router.include_router(admin_providers.router, prefix="/admin/providers", tags=["Admin Provider Moderation"])
|
api_router.include_router(admin_providers.router, prefix="/admin/providers", tags=["Admin Provider Moderation"])
|
||||||
|
api_router.include_router(locations.router, prefix="", tags=["Location Autocomplete"])
|
||||||
@@ -1338,10 +1338,25 @@ async def update_organization(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 3. Összegyűjtjük a változásokat (non-address fields)
|
# 3. Összegyűjtjük a változásokat (non-address fields)
|
||||||
|
# P0 BUGFIX: Filter out deprecated denormalized address fields that were dropped from the DB
|
||||||
|
# These columns (address_city, billing_zip, etc.) were physically removed from fleet.organizations
|
||||||
|
# in cleanup_ghost_columns_2026_07.sql. The Organization model no longer has these attributes.
|
||||||
|
DEPRECATED_ADDRESS_FIELDS = {
|
||||||
|
"address_zip", "address_city", "address_street_name", "address_street_type", "address_house_number",
|
||||||
|
"billing_zip", "billing_city", "billing_street_name", "billing_street_type", "billing_house_number",
|
||||||
|
"notification_zip", "notification_city", "notification_street_name", "notification_street_type", "notification_house_number",
|
||||||
|
}
|
||||||
update_fields = {}
|
update_fields = {}
|
||||||
for field_name in raw_data:
|
for field_name in raw_data:
|
||||||
value = raw_data[field_name]
|
value = raw_data[field_name]
|
||||||
if value is not None and hasattr(org, field_name):
|
if value is not None and hasattr(org, field_name):
|
||||||
|
# Skip deprecated address fields that no longer exist on the ORM model
|
||||||
|
if field_name in DEPRECATED_ADDRESS_FIELDS:
|
||||||
|
logger.warning(
|
||||||
|
f"Skipping deprecated field '{field_name}' for org {org_id} — "
|
||||||
|
f"column was dropped from database. Use address_detail instead."
|
||||||
|
)
|
||||||
|
continue
|
||||||
setattr(org, field_name, value)
|
setattr(org, field_name, value)
|
||||||
update_fields[field_name] = value
|
update_fields[field_name] = value
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ from app.models.identity.social import (
|
|||||||
SourceType,
|
SourceType,
|
||||||
ProviderValidation,
|
ProviderValidation,
|
||||||
)
|
)
|
||||||
from app.models.marketplace.service import ServiceStaging, ServiceProfile
|
from app.models.marketplace.service import ServiceProfile
|
||||||
|
from app.models.marketplace.staged_data import ServiceStaging
|
||||||
from app.models.gamification.gamification import UserContribution
|
from app.models.gamification.gamification import UserContribution
|
||||||
from app.models.vehicle.history import AuditLog
|
from app.models.vehicle.history import AuditLog
|
||||||
from app.services.gamification_service import gamification_service
|
from app.services.gamification_service import gamification_service
|
||||||
@@ -82,10 +83,15 @@ class ProviderDetail(BaseModel):
|
|||||||
contact_email: Optional[str] = None
|
contact_email: Optional[str] = None
|
||||||
website: Optional[str] = None
|
website: Optional[str] = None
|
||||||
category: Optional[str] = None
|
category: Optional[str] = None
|
||||||
|
description: Optional[str] = None
|
||||||
status: str
|
status: str
|
||||||
source: str
|
source: str
|
||||||
source_table: str = "service_providers"
|
source_table: str = "service_providers"
|
||||||
validation_score: int = 0
|
validation_score: int = 0
|
||||||
|
trust_score: Optional[int] = None
|
||||||
|
rejection_reason: Optional[str] = None
|
||||||
|
raw_data: Optional[Dict[str, Any]] = None
|
||||||
|
audit_trail: Optional[Dict[str, Any]] = None
|
||||||
evidence_image_path: Optional[str] = None
|
evidence_image_path: Optional[str] = None
|
||||||
added_by_user_id: Optional[int] = None
|
added_by_user_id: Optional[int] = None
|
||||||
category_ids: Optional[List[int]] = None
|
category_ids: Optional[List[int]] = None
|
||||||
@@ -564,13 +570,7 @@ async def get_provider_detail(
|
|||||||
name=sp.name,
|
name=sp.name,
|
||||||
address=sp.address or "",
|
address=sp.address or "",
|
||||||
city=sp.city,
|
city=sp.city,
|
||||||
address_detail=AddressOut(
|
address_detail=None,
|
||||||
zip=sp.address_zip,
|
|
||||||
city=sp.city,
|
|
||||||
street_name=sp.address_street_name,
|
|
||||||
street_type=sp.address_street_type,
|
|
||||||
house_number=sp.address_house_number,
|
|
||||||
),
|
|
||||||
plus_code=sp.plus_code,
|
plus_code=sp.plus_code,
|
||||||
contact_phone=sp.contact_phone,
|
contact_phone=sp.contact_phone,
|
||||||
contact_email=sp.contact_email,
|
contact_email=sp.contact_email,
|
||||||
@@ -586,6 +586,9 @@ async def get_provider_detail(
|
|||||||
supported_vehicle_classes=sp.supported_vehicle_classes or [],
|
supported_vehicle_classes=sp.supported_vehicle_classes or [],
|
||||||
specializations=sp.specializations or {},
|
specializations=sp.specializations or {},
|
||||||
opening_hours=opening_hours or {},
|
opening_hours=opening_hours or {},
|
||||||
|
# P0 BUGFIX: Include raw_data for ServiceProvider records so the frontend
|
||||||
|
# "Nyers adatok / Crawler" tab shows actual data instead of empty/mock state
|
||||||
|
raw_data=sp.raw_data or {},
|
||||||
created_at=sp.created_at,
|
created_at=sp.created_at,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -600,10 +603,21 @@ async def get_provider_detail(
|
|||||||
name=ss.name,
|
name=ss.name,
|
||||||
address=ss.full_address or "",
|
address=ss.full_address or "",
|
||||||
city=ss.city,
|
city=ss.city,
|
||||||
|
contact_phone=ss.contact_phone,
|
||||||
|
contact_email=ss.contact_email,
|
||||||
|
website=ss.website,
|
||||||
|
description=ss.description,
|
||||||
status=ss.status,
|
status=ss.status,
|
||||||
source="bot",
|
source=ss.source or "bot",
|
||||||
source_table="service_staging",
|
source_table="service_staging",
|
||||||
validation_score=0,
|
# BUGFIX: Use trust_score from staging as validation_score instead of hardcoded 0
|
||||||
|
# The staging table doesn't have a separate validation_score column,
|
||||||
|
# but trust_score reflects the bot's confidence in the data quality
|
||||||
|
validation_score=ss.trust_score or 0,
|
||||||
|
trust_score=ss.trust_score,
|
||||||
|
rejection_reason=ss.rejection_reason,
|
||||||
|
raw_data=ss.raw_data or {},
|
||||||
|
audit_trail=ss.audit_trail or {},
|
||||||
created_at=ss.created_at,
|
created_at=ss.created_at,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1336,13 +1350,7 @@ async def update_provider(
|
|||||||
name=provider.name,
|
name=provider.name,
|
||||||
address=provider.address or "",
|
address=provider.address or "",
|
||||||
city=provider.city,
|
city=provider.city,
|
||||||
address_detail=AddressOut(
|
address_detail=None,
|
||||||
zip=provider.address_zip,
|
|
||||||
city=provider.city,
|
|
||||||
street_name=provider.address_street_name,
|
|
||||||
street_type=provider.address_street_type,
|
|
||||||
house_number=provider.address_house_number,
|
|
||||||
),
|
|
||||||
plus_code=provider.plus_code,
|
plus_code=provider.plus_code,
|
||||||
contact_phone=provider.contact_phone,
|
contact_phone=provider.contact_phone,
|
||||||
contact_email=provider.contact_email,
|
contact_email=provider.contact_email,
|
||||||
|
|||||||
93
backend/app/api/v1/endpoints/locations.py
Normal file
93
backend/app/api/v1/endpoints/locations.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
"""
|
||||||
|
🌍 Location Autocomplete API Endpoint.
|
||||||
|
|
||||||
|
Provides autocomplete search for postal codes and cities from the
|
||||||
|
system.geo_postal_codes table. Used by the frontend SmartLocationInput
|
||||||
|
component to let users quickly find and select a zip/city pair.
|
||||||
|
|
||||||
|
Schema: system.geo_postal_codes
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
from sqlalchemy import select, or_
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
from app.api.deps import get_db
|
||||||
|
from app.models.identity.address import GeoPostalCode
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
class LocationAutocompleteItem(BaseModel):
|
||||||
|
"""Egy találat a település autocomplete keresőben."""
|
||||||
|
id: int
|
||||||
|
zip_code: str
|
||||||
|
city: str
|
||||||
|
country_code: str = "HU"
|
||||||
|
|
||||||
|
model_config = {"from_attributes": True}
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/locations/autocomplete", response_model=List[LocationAutocompleteItem])
|
||||||
|
async def autocomplete_locations(
|
||||||
|
q: str = Query(..., min_length=1, max_length=100, description="Keresőszó (irányítószám vagy városrészlet)"),
|
||||||
|
country_code: str = Query("HU", max_length=5, description="Országkód szűrő (alapértelmezett: HU)"),
|
||||||
|
limit: int = Query(15, ge=1, le=50, description="Max találatok száma"),
|
||||||
|
db: AsyncSession = Depends(get_db),
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
GET /api/v1/locations/autocomplete?q=budapest
|
||||||
|
|
||||||
|
Autocomplete keresés a system.geo_postal_codes táblában.
|
||||||
|
A keresés az irányítószámra (zip_code) és a város névre (city) is
|
||||||
|
történik ILIKE operátorral.
|
||||||
|
|
||||||
|
Példák:
|
||||||
|
/api/v1/locations/autocomplete?q=1011 -> 1011 Budapest
|
||||||
|
/api/v1/locations/autocomplete?q=budapest -> 1011 Budapest, 1012 Budapest, ...
|
||||||
|
/api/v1/locations/autocomplete?q=101 -> 1011 Budapest, 1012 Budapest, ...
|
||||||
|
/api/v1/locations/autocomplete?q=bud&country_code=AT -> 5020 Salzburg, ...
|
||||||
|
"""
|
||||||
|
if not q.strip():
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
|
detail="A keresőszó (q) nem lehet üres.",
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
stmt = (
|
||||||
|
select(GeoPostalCode)
|
||||||
|
.where(
|
||||||
|
GeoPostalCode.country_code == country_code,
|
||||||
|
or_(
|
||||||
|
GeoPostalCode.zip_code.ilike(f"%{q.strip()}%"),
|
||||||
|
GeoPostalCode.city.ilike(f"%{q.strip()}%"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.order_by(GeoPostalCode.zip_code, GeoPostalCode.city)
|
||||||
|
.limit(limit)
|
||||||
|
)
|
||||||
|
result = await db.execute(stmt)
|
||||||
|
items = result.scalars().all()
|
||||||
|
|
||||||
|
return [
|
||||||
|
LocationAutocompleteItem(
|
||||||
|
id=item.id,
|
||||||
|
zip_code=item.zip_code,
|
||||||
|
city=item.city,
|
||||||
|
country_code=item.country_code,
|
||||||
|
)
|
||||||
|
for item in items
|
||||||
|
]
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Hiba a location autocomplete során: {e}", exc_info=True)
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
detail="Hiba történt a település keresés során.",
|
||||||
|
)
|
||||||
@@ -444,7 +444,7 @@ class AssetEvent(Base):
|
|||||||
asset: Mapped["Asset"] = relationship("Asset", back_populates="events")
|
asset: Mapped["Asset"] = relationship("Asset", back_populates="events")
|
||||||
user: Mapped[Optional["User"]] = relationship("User")
|
user: Mapped[Optional["User"]] = relationship("User")
|
||||||
organization: Mapped[Optional["Organization"]] = relationship("Organization")
|
organization: Mapped[Optional["Organization"]] = relationship("Organization")
|
||||||
cost: Mapped[Optional["AssetCost"]] = relationship("AssetCost", foreign_keys=[cost_id])
|
cost: Mapped[Optional["AssetCost"]] = relationship("AssetCost", foreign_keys=[cost_id], viewonly=True)
|
||||||
|
|
||||||
# Kapcsolat a hivatkozott költséghez
|
# Kapcsolat a hivatkozott költséghez
|
||||||
linked_expense: Mapped[Optional["AssetCost"]] = relationship(
|
linked_expense: Mapped[Optional["AssetCost"]] = relationship(
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ Usage:
|
|||||||
from app.schemas.address import AddressIn, AddressOut
|
from app.schemas.address import AddressIn, AddressOut
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import uuid
|
||||||
from pydantic import BaseModel, Field, ConfigDict
|
from pydantic import BaseModel, Field, ConfigDict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -42,7 +43,7 @@ class AddressOut(BaseModel):
|
|||||||
Includes the full Address object data, with zip/city resolved
|
Includes the full Address object data, with zip/city resolved
|
||||||
via the postal_code relationship.
|
via the postal_code relationship.
|
||||||
"""
|
"""
|
||||||
id: str # UUID as string for JSON serialization
|
id: uuid.UUID # UUID as native UUID for JSON serialization
|
||||||
zip: Optional[str] = None
|
zip: Optional[str] = None
|
||||||
city: Optional[str] = None
|
city: Optional[str] = None
|
||||||
street_name: Optional[str] = None
|
street_name: Optional[str] = None
|
||||||
|
|||||||
6
frontend_admin/.nuxt/components.d.ts
vendored
6
frontend_admin/.nuxt/components.d.ts
vendored
@@ -15,6 +15,9 @@ type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {},
|
|||||||
|
|
||||||
|
|
||||||
export const LanguageSwitcher: typeof import("../components/LanguageSwitcher.vue")['default']
|
export const LanguageSwitcher: typeof import("../components/LanguageSwitcher.vue")['default']
|
||||||
|
export const RawDataViewer: typeof import("../components/RawDataViewer.vue")['default']
|
||||||
|
export const SharedAddressForm: typeof import("../components/SharedAddressForm.vue")['default']
|
||||||
|
export const SmartLocationInput: typeof import("../components/SmartLocationInput.vue")['default']
|
||||||
export const TreeNode: typeof import("../components/TreeNode.vue")['default']
|
export const TreeNode: typeof import("../components/TreeNode.vue")['default']
|
||||||
export const ChartsUserTrendChart: typeof import("../components/charts/UserTrendChart.vue")['default']
|
export const ChartsUserTrendChart: typeof import("../components/charts/UserTrendChart.vue")['default']
|
||||||
export const GaragesGarageFleetTab: typeof import("../components/garages/GarageFleetTab.vue")['default']
|
export const GaragesGarageFleetTab: typeof import("../components/garages/GarageFleetTab.vue")['default']
|
||||||
@@ -46,6 +49,9 @@ export const Html: typeof import("../node_modules/nuxt/dist/head/runtime/compone
|
|||||||
export const Body: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Body']
|
export const Body: typeof import("../node_modules/nuxt/dist/head/runtime/components")['Body']
|
||||||
export const NuxtIsland: typeof import("../node_modules/nuxt/dist/app/components/nuxt-island")['default']
|
export const NuxtIsland: typeof import("../node_modules/nuxt/dist/app/components/nuxt-island")['default']
|
||||||
export const LazyLanguageSwitcher: LazyComponent<typeof import("../components/LanguageSwitcher.vue")['default']>
|
export const LazyLanguageSwitcher: LazyComponent<typeof import("../components/LanguageSwitcher.vue")['default']>
|
||||||
|
export const LazyRawDataViewer: LazyComponent<typeof import("../components/RawDataViewer.vue")['default']>
|
||||||
|
export const LazySharedAddressForm: LazyComponent<typeof import("../components/SharedAddressForm.vue")['default']>
|
||||||
|
export const LazySmartLocationInput: LazyComponent<typeof import("../components/SmartLocationInput.vue")['default']>
|
||||||
export const LazyTreeNode: LazyComponent<typeof import("../components/TreeNode.vue")['default']>
|
export const LazyTreeNode: LazyComponent<typeof import("../components/TreeNode.vue")['default']>
|
||||||
export const LazyChartsUserTrendChart: LazyComponent<typeof import("../components/charts/UserTrendChart.vue")['default']>
|
export const LazyChartsUserTrendChart: LazyComponent<typeof import("../components/charts/UserTrendChart.vue")['default']>
|
||||||
export const LazyGaragesGarageFleetTab: LazyComponent<typeof import("../components/garages/GarageFleetTab.vue")['default']>
|
export const LazyGaragesGarageFleetTab: LazyComponent<typeof import("../components/garages/GarageFleetTab.vue")['default']>
|
||||||
|
|||||||
@@ -3654,22 +3654,7 @@ _1xyvuM2CQDhMlDxE8qY1t3Wi66ocgNUNDNce4pREOrU,
|
|||||||
_wH6JrtIxmaSoA8lCPWFnE9z4lQeXW6H5z3l5aymEQw
|
_wH6JrtIxmaSoA8lCPWFnE9z4lQeXW6H5z3l5aymEQw
|
||||||
];
|
];
|
||||||
|
|
||||||
const assets = {
|
const assets = {};
|
||||||
"/index.mjs": {
|
|
||||||
"type": "text/javascript; charset=utf-8",
|
|
||||||
"etag": "\"248e7-Igi10px+YQpoWileEHP4mJUJvPs\"",
|
|
||||||
"mtime": "2026-07-01T10:06:21.958Z",
|
|
||||||
"size": 149735,
|
|
||||||
"path": "index.mjs"
|
|
||||||
},
|
|
||||||
"/index.mjs.map": {
|
|
||||||
"type": "application/json",
|
|
||||||
"etag": "\"840e4-m5REc9B8WpnuwKHzj4TKXKSFgo0\"",
|
|
||||||
"mtime": "2026-07-01T10:06:21.958Z",
|
|
||||||
"size": 540900,
|
|
||||||
"path": "index.mjs.map"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function readAsset (id) {
|
function readAsset (id) {
|
||||||
const serverDir = dirname$1(fileURLToPath(globalThis._importMeta_.url));
|
const serverDir = dirname$1(fileURLToPath(globalThis._importMeta_.url));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{_ as y}from"./C2l6xpLd.js";import{p as v,e as h,q as _,s as k,c as r,a as t,v as S,i as s,t as c,j as u,x as V,y as p,z as m,A as x,b as L,w as C,l as f,o as i,d as N}from"./BIbQr1Hg.js";const A=v("/sf_logo.png"),B={class:"min-h-screen bg-slate-900 flex items-center justify-center px-4"},E={class:"w-full max-w-md"},R={class:"bg-slate-800 rounded-xl shadow-2xl border border-slate-700 p-8"},j={key:0,class:"mb-6 p-3 rounded-lg bg-red-900/40 border border-red-700 text-red-300 text-sm"},q=["disabled"],D={key:0,class:"animate-spin h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},F={class:"mt-6 text-center"},z=h({__name:"login",setup(I){const a=f(""),l=f(""),b=_(),o=k();async function g(){try{await o.login(a.value,l.value),b.push("/")}catch(d){console.error("Login failed:",d)}}return(d,e)=>{const w=y;return i(),r("div",B,[t("div",E,[e[6]||(e[6]=S('<div class="text-center mb-8"><div class="flex items-center justify-center gap-3 mb-4"><img src="'+A+'" class="h-12 w-auto drop-shadow-md" alt="ServiceFinder Logo"><span class="text-3xl font-extrabold tracking-wider"><span class="text-white">SERVICE</span><span class="text-cyan-400">FINDER</span></span></div><h1 class="text-xl font-semibold text-slate-300">Staff Portal</h1><p class="text-sm text-slate-500 mt-1">Authorised personnel only</p></div>',1)),t("div",R,[s(o).error?(i(),r("div",j,c(s(o).error),1)):u("",!0),t("form",{onSubmit:V(g,["prevent"]),class:"space-y-5"},[t("div",null,[e[2]||(e[2]=t("label",{for:"email",class:"block text-sm font-medium text-slate-300 mb-1.5"}," Email Address ",-1)),p(t("input",{id:"email","onUpdate:modelValue":e[0]||(e[0]=n=>x(a)?a.value=n:null),type:"email",autocomplete:"email",required:"",placeholder:"admin@example.com",class:"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition"},null,512),[[m,s(a)]])]),t("div",null,[e[3]||(e[3]=t("label",{for:"password",class:"block text-sm font-medium text-slate-300 mb-1.5"}," Password ",-1)),p(t("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=n=>x(l)?l.value=n:null),type:"password",autocomplete:"current-password",required:"",placeholder:"••••••••",class:"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition"},null,512),[[m,s(l)]])]),t("button",{type:"submit",disabled:s(o).isLoading,class:"w-full py-2.5 px-4 bg-cyan-600 hover:bg-cyan-500 disabled:bg-cyan-800 disabled:cursor-not-allowed text-white font-semibold rounded-lg transition duration-200 flex items-center justify-center gap-2"},[s(o).isLoading?(i(),r("svg",D,[...e[4]||(e[4]=[t("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),t("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"},null,-1)])])):u("",!0),t("span",null,c(s(o).isLoading?"Signing in...":"Sign In"),1)],8,q)],32),t("div",F,[L(w,{to:"/",class:"text-sm text-slate-500 hover:text-cyan-400 transition"},{default:C(()=>[...e[5]||(e[5]=[N(" ← Back to ServiceFinder ",-1)])]),_:1})])])])])}}});export{z as default};
|
import{_ as y}from"./8DBoKuB3.js";import{p as v,e as h,q as _,s as k,c as r,a as t,v as S,i as s,t as c,j as u,x as V,y as p,z as m,A as x,b as L,w as C,l as f,o as i,d as N}from"./BsgqXOrB.js";const A=v("/sf_logo.png"),B={class:"min-h-screen bg-slate-900 flex items-center justify-center px-4"},E={class:"w-full max-w-md"},R={class:"bg-slate-800 rounded-xl shadow-2xl border border-slate-700 p-8"},j={key:0,class:"mb-6 p-3 rounded-lg bg-red-900/40 border border-red-700 text-red-300 text-sm"},q=["disabled"],D={key:0,class:"animate-spin h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},F={class:"mt-6 text-center"},z=h({__name:"login",setup(I){const a=f(""),l=f(""),b=_(),o=k();async function g(){try{await o.login(a.value,l.value),b.push("/")}catch(d){console.error("Login failed:",d)}}return(d,e)=>{const w=y;return i(),r("div",B,[t("div",E,[e[6]||(e[6]=S('<div class="text-center mb-8"><div class="flex items-center justify-center gap-3 mb-4"><img src="'+A+'" class="h-12 w-auto drop-shadow-md" alt="ServiceFinder Logo"><span class="text-3xl font-extrabold tracking-wider"><span class="text-white">SERVICE</span><span class="text-cyan-400">FINDER</span></span></div><h1 class="text-xl font-semibold text-slate-300">Staff Portal</h1><p class="text-sm text-slate-500 mt-1">Authorised personnel only</p></div>',1)),t("div",R,[s(o).error?(i(),r("div",j,c(s(o).error),1)):u("",!0),t("form",{onSubmit:V(g,["prevent"]),class:"space-y-5"},[t("div",null,[e[2]||(e[2]=t("label",{for:"email",class:"block text-sm font-medium text-slate-300 mb-1.5"}," Email Address ",-1)),p(t("input",{id:"email","onUpdate:modelValue":e[0]||(e[0]=n=>x(a)?a.value=n:null),type:"email",autocomplete:"email",required:"",placeholder:"admin@example.com",class:"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition"},null,512),[[m,s(a)]])]),t("div",null,[e[3]||(e[3]=t("label",{for:"password",class:"block text-sm font-medium text-slate-300 mb-1.5"}," Password ",-1)),p(t("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=n=>x(l)?l.value=n:null),type:"password",autocomplete:"current-password",required:"",placeholder:"••••••••",class:"w-full px-4 py-2.5 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:border-transparent transition"},null,512),[[m,s(l)]])]),t("button",{type:"submit",disabled:s(o).isLoading,class:"w-full py-2.5 px-4 bg-cyan-600 hover:bg-cyan-500 disabled:bg-cyan-800 disabled:cursor-not-allowed text-white font-semibold rounded-lg transition duration-200 flex items-center justify-center gap-2"},[s(o).isLoading?(i(),r("svg",D,[...e[4]||(e[4]=[t("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),t("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"},null,-1)])])):u("",!0),t("span",null,c(s(o).isLoading?"Signing in...":"Sign In"),1)],8,q)],32),t("div",F,[L(w,{to:"/",class:"text-sm text-slate-500 hover:text-cyan-400 transition"},{default:C(()=>[...e[5]||(e[5]=[N(" ← Back to ServiceFinder ",-1)])]),_:1})])])])])}}});export{z as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{u as v}from"./DXATb271.js";function h(){const o=v();function u(t,e){const r=o.activeLocale||"en-EU";try{return new Intl.NumberFormat(r,e).format(t)}catch{return new Intl.NumberFormat("en-EU",e).format(t)}}function a(t,e,r){const c=o.activeLocale||"en-EU",n=e||o.activeCurrency||"EUR";try{return new Intl.NumberFormat(c,{style:"currency",currency:n,minimumFractionDigits:2,maximumFractionDigits:2,...r}).format(t)}catch{return`${t.toFixed(2)} ${n}`}}function s(t,e){const r=o.activeLocale||"en-EU",c=o.activeTimezone||"Europe/Brussels",n=typeof t=="string"||typeof t=="number"?new Date(t):t;try{return new Intl.DateTimeFormat(r,{timezone:c,year:"numeric",month:"2-digit",day:"2-digit",...e}).format(n)}catch{return n.toLocaleDateString("en-GB")}}function l(t,e){const r=o.activeLocale||"en-EU",c=o.activeTimezone||"Europe/Brussels",n=typeof t=="string"||typeof t=="number"?new Date(t):t;try{return new Intl.DateTimeFormat(r,{timezone:c,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",...e}).format(n)}catch{return n.toLocaleString("en-GB")}}function f(t,e){const r=o.activeLocale||"en-EU";try{return new Intl.NumberFormat(r,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:1,...e}).format(t/100)}catch{return`${t}%`}}function m(t,e){const r=e??o.activeVatRate??0,c=t*(r/100),n=t+c;return{net:t,vat:c,gross:n,vatRate:r}}function y(t,e,r){const{net:c,vat:n,gross:g,vatRate:F}=m(t,e),i=r||o.activeCurrency||"EUR";return`Net: ${a(c,i)} | VAT: ${a(n,i)} (${F}%) | Gross: ${a(g,i)}`}return{formatNumber:u,formatCurrency:a,formatDate:s,formatDateTime:l,formatPercent:f,calculatePriceWithVat:m,formatPriceWithVat:y}}export{h as u};
|
import{u as v}from"./VE1TOSQ_.js";function h(){const o=v();function u(t,e){const r=o.activeLocale||"en-EU";try{return new Intl.NumberFormat(r,e).format(t)}catch{return new Intl.NumberFormat("en-EU",e).format(t)}}function a(t,e,r){const c=o.activeLocale||"en-EU",n=e||o.activeCurrency||"EUR";try{return new Intl.NumberFormat(c,{style:"currency",currency:n,minimumFractionDigits:2,maximumFractionDigits:2,...r}).format(t)}catch{return`${t.toFixed(2)} ${n}`}}function s(t,e){const r=o.activeLocale||"en-EU",c=o.activeTimezone||"Europe/Brussels",n=typeof t=="string"||typeof t=="number"?new Date(t):t;try{return new Intl.DateTimeFormat(r,{timezone:c,year:"numeric",month:"2-digit",day:"2-digit",...e}).format(n)}catch{return n.toLocaleDateString("en-GB")}}function l(t,e){const r=o.activeLocale||"en-EU",c=o.activeTimezone||"Europe/Brussels",n=typeof t=="string"||typeof t=="number"?new Date(t):t;try{return new Intl.DateTimeFormat(r,{timezone:c,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",...e}).format(n)}catch{return n.toLocaleString("en-GB")}}function f(t,e){const r=o.activeLocale||"en-EU";try{return new Intl.NumberFormat(r,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:1,...e}).format(t/100)}catch{return`${t}%`}}function m(t,e){const r=e??o.activeVatRate??0,c=t*(r/100),n=t+c;return{net:t,vat:c,gross:n,vatRate:r}}function y(t,e,r){const{net:c,vat:n,gross:g,vatRate:F}=m(t,e),i=r||o.activeCurrency||"EUR";return`Net: ${a(c,i)} | VAT: ${a(n,i)} (${F}%) | Gross: ${a(g,i)}`}return{formatNumber:u,formatCurrency:a,formatDate:s,formatDateTime:l,formatPercent:f,calculatePriceWithVat:m,formatPriceWithVat:y}}export{h as u};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{_ as s}from"./DlAUqK2U.js";import{o,c as t,V as r}from"./BIbQr1Hg.js";const c={},n={class:"bg-slate-900 min-h-screen"};function a(e,l){return o(),t("div",n,[r(e.$slots,"default")])}const d=s(c,[["render",a]]);export{d as default};
|
import{_ as s}from"./DlAUqK2U.js";import{o,c as t,V as r}from"./BsgqXOrB.js";const c={},n={class:"bg-slate-900 min-h-screen"};function a(e,l){return o(),t("div",n,[r(e.$slots,"default")])}const d=s(c,[["render",a]]);export{d as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/client/_nuxt/CLurynew.js
vendored
Normal file
1
frontend_admin/.nuxt/dist/client/_nuxt/CLurynew.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/client/_nuxt/C_F9KetE.js
vendored
Normal file
1
frontend_admin/.nuxt/dist/client/_nuxt/C_F9KetE.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{S as a,h as i,G as o,s as l,U as c}from"./BIbQr1Hg.js";const h=a(async(s,f)=>{let t,r;if(s.path==="/login")return;if(!i("access_token").value)return o("/login");const e=l();if(!e.user)try{[t,r]=c(()=>e.fetchUser()),await t,r()}catch{return e.logout(),o("/login")}if(!e.user)return e.logout(),o("/login");const n=["SUPERADMIN","ADMIN","MODERATOR","SALES_REP","SERVICE_MGR"],u=(e.user.role||"").toUpperCase();if(!n.includes(u))return e.logout(),o("/login")});export{h as default};
|
import{S as a,h as i,G as o,s as l,U as c}from"./BsgqXOrB.js";const h=a(async(s,f)=>{let t,r;if(s.path==="/login")return;if(!i("access_token").value)return o("/login");const e=l();if(!e.user)try{[t,r]=c(()=>e.fetchUser()),await t,r()}catch{return e.logout(),o("/login")}if(!e.user)return e.logout(),o("/login");const n=["SUPERADMIN","ADMIN","MODERATOR","SALES_REP","SERVICE_MGR"],u=(e.user.role||"").toUpperCase();if(!n.includes(u))return e.logout(),o("/login")});export{h as default};
|
||||||
@@ -1 +1 @@
|
|||||||
import{_ as a}from"./C2l6xpLd.js";import{_ as i}from"./DlAUqK2U.js";import{u,o as c,c as l,a as e,t as r,b as d,w as p,d as f}from"./BIbQr1Hg.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:404},statusText:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return u({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=a;return c(),l("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.status)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[d(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:p(()=>[f(r(t.backHome),1)]),_:1})])])])}}},z=i(y,[["__scopeId","data-v-1bd9e11a"]]);export{z as default};
|
import{_ as a}from"./8DBoKuB3.js";import{_ as i}from"./DlAUqK2U.js";import{u,o as c,c as l,a as e,t as r,b as d,w as p,d as f}from"./BsgqXOrB.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:404},statusText:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return u({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=a;return c(),l("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.status)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[d(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:p(()=>[f(r(t.backHome),1)]),_:1})])])])}}},z=i(y,[["__scopeId","data-v-1bd9e11a"]]);export{z as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{_ as s}from"./DlAUqK2U.js";import{u as a,o as i,c as u,a as e,t as o}from"./BIbQr1Hg.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:500},statusText:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return a({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(i(),u("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.status)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},h=s(f,[["__scopeId","data-v-a01dd0ba"]]);export{h as default};
|
import{_ as s}from"./DlAUqK2U.js";import{u as a,o as i,c as u,a as e,t as o}from"./BsgqXOrB.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:500},statusText:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return a({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(i(),u("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.status)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},h=s(f,[["__scopeId","data-v-a01dd0ba"]]);export{h as default};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{ac as _,l as u,m as a}from"./BIbQr1Hg.js";const h=_("region",()=>{const t=u([]),n=u(null),c=u(!1),l=u(null),o=a(()=>t.value.find(e=>e.country_code==="DEFAULT")||null),s=a(()=>{const e=new Map;for(const r of t.value)e.set(r.country_code,r);return e}),i=a(()=>n.value?.currency||o.value?.currency||"EUR"),v=a(()=>n.value?.locale_code||o.value?.locale_code||"en-EU"),f=a(()=>n.value?.default_vat_rate??o.value?.default_vat_rate??0),d=a(()=>n.value?.timezone||o.value?.timezone||"Europe/Brussels");async function g(){if(!(t.value.length>0)){c.value=!0,l.value=null;try{const e=await $fetch("/api/v1/system/regions");t.value=e||[]}catch(e){l.value=e?.data?.detail||e?.message||"Failed to load regions",console.error("[RegionStore] Fetch error:",e)}finally{c.value=!1}}}function m(e){const r=t.value.find(R=>R.country_code===e);n.value=r||o.value}function y(e){return s.value.get(e)}return{regions:t,activeRegion:n,isLoading:c,error:l,defaultRegion:o,regionMap:s,activeCurrency:i,activeLocale:v,activeVatRate:f,activeTimezone:d,fetchRegions:g,setActiveRegion:m,getRegion:y}});export{h as u};
|
import{ac as _,l as u,m as a}from"./BsgqXOrB.js";const h=_("region",()=>{const t=u([]),n=u(null),c=u(!1),l=u(null),o=a(()=>t.value.find(e=>e.country_code==="DEFAULT")||null),s=a(()=>{const e=new Map;for(const r of t.value)e.set(r.country_code,r);return e}),i=a(()=>n.value?.currency||o.value?.currency||"EUR"),v=a(()=>n.value?.locale_code||o.value?.locale_code||"en-EU"),f=a(()=>n.value?.default_vat_rate??o.value?.default_vat_rate??0),d=a(()=>n.value?.timezone||o.value?.timezone||"Europe/Brussels");async function g(){if(!(t.value.length>0)){c.value=!0,l.value=null;try{const e=await $fetch("/api/v1/system/regions");t.value=e||[]}catch(e){l.value=e?.data?.detail||e?.message||"Failed to load regions",console.error("[RegionStore] Fetch error:",e)}finally{c.value=!1}}}function m(e){const r=t.value.find(R=>R.country_code===e);n.value=r||o.value}function y(e){return s.value.get(e)}return{regions:t,activeRegion:n,isLoading:c,error:l,defaultRegion:o,regionMap:s,activeCurrency:i,activeLocale:v,activeVatRate:f,activeTimezone:d,fetchRegions:g,setActiveRegion:m,getRegion:y}});export{h as u};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-thumb:hover{background-color:#64748bb3}
|
|
||||||
1
frontend_admin/.nuxt/dist/client/_nuxt/edit.C2SUSrlt.css
vendored
Normal file
1
frontend_admin/.nuxt/dist/client/_nuxt/edit.C2SUSrlt.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-thumb:hover{background-color:#64748bb3}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
input[type=range][data-v-aa1d3c94]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}input[type=range][data-v-aa1d3c94]::-moz-range-thumb{background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}.timeline-enter-active[data-v-aa1d3c94]{transition:all .3s ease-out}.timeline-enter-from[data-v-aa1d3c94]{opacity:0;transform:translate(-10px)}
|
|
||||||
1
frontend_admin/.nuxt/dist/client/_nuxt/index.pEDhoDTW.css
vendored
Normal file
1
frontend_admin/.nuxt/dist/client/_nuxt/index.pEDhoDTW.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
input[type=range][data-v-5941cb1d]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}input[type=range][data-v-5941cb1d]::-moz-range-thumb{background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}.timeline-enter-active[data-v-5941cb1d]{transition:all .3s ease-out}.timeline-enter-from[data-v-5941cb1d]{opacity:0;transform:translate(-10px)}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
frontend_admin/.nuxt/dist/server/_nuxt/SmartLocationInput-styles.D3314zoG.mjs
vendored
Normal file
4
frontend_admin/.nuxt/dist/server/_nuxt/SmartLocationInput-styles.D3314zoG.mjs
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import style_0 from "./edit-styles-1.mjs-J0c-7dzy.js";
|
||||||
|
export default [
|
||||||
|
style_0
|
||||||
|
]
|
||||||
@@ -1,333 +0,0 @@
|
|||||||
import { defineComponent, useSSRContext, computed, ref, reactive, createVNode, resolveDynamicComponent } from "vue";
|
|
||||||
import { ssrRenderAttrs, ssrRenderClass, ssrIncludeBooleanAttr, ssrInterpolate, ssrRenderList, ssrRenderComponent, ssrRenderVNode, ssrRenderAttr, ssrLooseContain } from "vue/server-renderer";
|
|
||||||
import { useRoute, useRouter } from "vue-router";
|
|
||||||
import "/app/node_modules/klona/dist/index.mjs";
|
|
||||||
import "/app/node_modules/hookable/dist/index.mjs";
|
|
||||||
import "../server.mjs";
|
|
||||||
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
|
|
||||||
import "/app/node_modules/ofetch/dist/node.mjs";
|
|
||||||
import "#internal/nuxt/paths";
|
|
||||||
import "/app/node_modules/unctx/dist/index.mjs";
|
|
||||||
import "/app/node_modules/h3/dist/index.mjs";
|
|
||||||
import "pinia";
|
|
||||||
import "/app/node_modules/defu/dist/defu.mjs";
|
|
||||||
import "/app/node_modules/ufo/dist/index.mjs";
|
|
||||||
import "/app/node_modules/cookie-es/dist/index.mjs";
|
|
||||||
import "/app/node_modules/destr/dist/index.mjs";
|
|
||||||
import "/app/node_modules/ohash/dist/index.mjs";
|
|
||||||
import "/app/node_modules/@unhead/vue/dist/index.mjs";
|
|
||||||
import "@vue/devtools-api";
|
|
||||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "TreeNode",
|
|
||||||
__ssrInlineRender: true,
|
|
||||||
props: {
|
|
||||||
node: {},
|
|
||||||
selectedIds: {},
|
|
||||||
expandedIds: {}
|
|
||||||
},
|
|
||||||
emits: ["toggle", "toggle-expand"],
|
|
||||||
setup(__props) {
|
|
||||||
return (_ctx, _push, _parent, _attrs) => {
|
|
||||||
const _component_TreeNode = _sfc_main$1;
|
|
||||||
_push(`<div${ssrRenderAttrs(_attrs)}><div class="flex items-center gap-2 py-1"><button class="text-slate-500 hover:text-slate-300 transition w-4 h-4 flex items-center justify-center"><svg class="${ssrRenderClass([__props.expandedIds.has(__props.node.id) ? "rotate-90" : "", "w-3 h-3 transition-transform"])}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></button><label class="flex items-center gap-2 cursor-pointer flex-1"><input type="checkbox"${ssrIncludeBooleanAttr(__props.selectedIds.includes(__props.node.id)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50"><span class="text-sm text-slate-300">${ssrInterpolate(__props.node.name_hu || __props.node.name_en || __props.node.key)}</span><span class="text-xs text-slate-500">(Szint ${ssrInterpolate(__props.node.level)})</span></label></div>`);
|
|
||||||
if (__props.expandedIds.has(__props.node.id) && __props.node.children?.length) {
|
|
||||||
_push(`<div class="ml-6 border-l border-slate-700 pl-3"><!--[-->`);
|
|
||||||
ssrRenderList(__props.node.children, (child) => {
|
|
||||||
_push(`<div>`);
|
|
||||||
_push(ssrRenderComponent(_component_TreeNode, {
|
|
||||||
node: child,
|
|
||||||
"selected-ids": __props.selectedIds,
|
|
||||||
"expanded-ids": __props.expandedIds,
|
|
||||||
onToggle: (id) => _ctx.$emit("toggle", id),
|
|
||||||
onToggleExpand: (id) => _ctx.$emit("toggle-expand", id)
|
|
||||||
}, null, _parent));
|
|
||||||
_push(`</div>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
_push(`</div>`);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _sfc_setup$1 = _sfc_main$1.setup;
|
|
||||||
_sfc_main$1.setup = (props, ctx) => {
|
|
||||||
const ssrContext = useSSRContext();
|
|
||||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/TreeNode.vue");
|
|
||||||
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
|
||||||
};
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "edit",
|
|
||||||
__ssrInlineRender: true,
|
|
||||||
setup(__props) {
|
|
||||||
const VEHICLE_CLASSES = [
|
|
||||||
{ key: "car", label: "Személyautó" },
|
|
||||||
{ key: "motorcycle", label: "Motorkerékpár" },
|
|
||||||
{ key: "truck", label: "Teherautó" },
|
|
||||||
{ key: "hgv", label: "Nehézgépjármű (HGV)" },
|
|
||||||
{ key: "light_commercial", label: "Kishaszonjármű" },
|
|
||||||
{ key: "personal", label: "Személyes" },
|
|
||||||
{ key: "boat", label: "Csónak/Vízi" },
|
|
||||||
{ key: "other", label: "Egyéb" }
|
|
||||||
];
|
|
||||||
const route = useRoute();
|
|
||||||
useRouter();
|
|
||||||
computed(() => Number(route.params.id));
|
|
||||||
const loading = ref(true);
|
|
||||||
const error = ref(false);
|
|
||||||
const provider = ref(null);
|
|
||||||
const saveLoading = ref(false);
|
|
||||||
const toast = ref(null);
|
|
||||||
const activeTab = ref("basic");
|
|
||||||
const tabs = [
|
|
||||||
{ key: "basic", label: "Alapadatok & Kapcsolat", icon: "svg" },
|
|
||||||
{ key: "matrix", label: "Szolgáltatások & Járművek", icon: "svg" },
|
|
||||||
{ key: "location", label: "Helyszín & Lokáció", icon: "svg" },
|
|
||||||
{ key: "hours", label: "Nyitvatartás", icon: "svg" }
|
|
||||||
];
|
|
||||||
const categoryTree = ref([]);
|
|
||||||
const treeLoading = ref(false);
|
|
||||||
const expandedNodes = ref(/* @__PURE__ */ new Set());
|
|
||||||
const brandInput = ref("");
|
|
||||||
const propulsionInput = ref("");
|
|
||||||
const form = reactive({
|
|
||||||
name: "",
|
|
||||||
address: "",
|
|
||||||
city: "",
|
|
||||||
address_zip: "",
|
|
||||||
address_street_name: "",
|
|
||||||
address_street_type: "",
|
|
||||||
address_house_number: "",
|
|
||||||
plus_code: "",
|
|
||||||
contact_phone: "",
|
|
||||||
contact_email: "",
|
|
||||||
website: "",
|
|
||||||
category: "",
|
|
||||||
category_ids: [],
|
|
||||||
supported_vehicle_classes: [],
|
|
||||||
specializations: {
|
|
||||||
brands: [],
|
|
||||||
propulsion: []
|
|
||||||
},
|
|
||||||
opening_hours: {},
|
|
||||||
is_always_open: false
|
|
||||||
});
|
|
||||||
const hasChanges = computed(() => {
|
|
||||||
if (!provider.value) return false;
|
|
||||||
const p = provider.value;
|
|
||||||
if (form.name !== (p.name || "")) return true;
|
|
||||||
if (form.address !== (p.address || "")) return true;
|
|
||||||
if (form.city !== (p.city || "")) return true;
|
|
||||||
if (form.address_zip !== (p.address_zip || "")) return true;
|
|
||||||
if (form.address_street_name !== (p.address_street_name || "")) return true;
|
|
||||||
if (form.address_street_type !== (p.address_street_type || "")) return true;
|
|
||||||
if (form.address_house_number !== (p.address_house_number || "")) return true;
|
|
||||||
if (form.plus_code !== (p.plus_code || "")) return true;
|
|
||||||
if (form.contact_phone !== (p.contact_phone || "")) return true;
|
|
||||||
if (form.contact_email !== (p.contact_email || "")) return true;
|
|
||||||
if (form.website !== (p.website || "")) return true;
|
|
||||||
if (form.category !== (p.category || "")) return true;
|
|
||||||
const sortedFormCategories = [...form.category_ids].sort();
|
|
||||||
const sortedOrigCategories = [...p.category_ids || []].sort();
|
|
||||||
if (JSON.stringify(sortedFormCategories) !== JSON.stringify(sortedOrigCategories)) return true;
|
|
||||||
const sortedFormClasses = [...form.supported_vehicle_classes].sort();
|
|
||||||
const sortedOrigClasses = [...p.supported_vehicle_classes || []].sort();
|
|
||||||
if (JSON.stringify(sortedFormClasses) !== JSON.stringify(sortedOrigClasses)) return true;
|
|
||||||
const normalizeSpec = (spec) => ({
|
|
||||||
brands: Array.isArray(spec?.brands) ? [...spec.brands].sort() : [],
|
|
||||||
propulsion: Array.isArray(spec?.propulsion) ? [...spec.propulsion].sort() : []
|
|
||||||
});
|
|
||||||
if (JSON.stringify(normalizeSpec(form.specializations)) !== JSON.stringify(normalizeSpec(p.specializations))) return true;
|
|
||||||
const DAYS2 = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
|
|
||||||
const normalizeHours = (hours) => {
|
|
||||||
const result = {};
|
|
||||||
const daysSource = hours?.days || hours;
|
|
||||||
for (const day of DAYS2) {
|
|
||||||
const slot = daysSource?.[day];
|
|
||||||
if (slot && typeof slot === "object" && slot.open && slot.close) {
|
|
||||||
result[day] = { open: slot.open, close: slot.close };
|
|
||||||
} else {
|
|
||||||
result[day] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
if (JSON.stringify(normalizeHours(form.opening_hours)) !== JSON.stringify(normalizeHours(p.opening_hours))) return true;
|
|
||||||
if (form.is_always_open !== (p.opening_hours?.always_open === true)) return true;
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
function findCategoryById(id, nodes) {
|
|
||||||
for (const node of nodes) {
|
|
||||||
if (node.id === id) return node;
|
|
||||||
if (node.children?.length) {
|
|
||||||
const found = findCategoryById(id, node.children);
|
|
||||||
if (found) return found;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
function getCategoryName(id) {
|
|
||||||
const node = findCategoryById(id, categoryTree.value);
|
|
||||||
if (!node) return `#${id}`;
|
|
||||||
return node.name_hu || node.name_en || node.key;
|
|
||||||
}
|
|
||||||
function toggleCategory(id) {
|
|
||||||
const idx = form.category_ids.indexOf(id);
|
|
||||||
if (idx >= 0) {
|
|
||||||
form.category_ids.splice(idx, 1);
|
|
||||||
} else {
|
|
||||||
form.category_ids.push(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function toggleTreeNode(id) {
|
|
||||||
const newSet = new Set(expandedNodes.value);
|
|
||||||
if (newSet.has(id)) {
|
|
||||||
newSet.delete(id);
|
|
||||||
} else {
|
|
||||||
newSet.add(id);
|
|
||||||
}
|
|
||||||
expandedNodes.value = newSet;
|
|
||||||
}
|
|
||||||
function isCategorySelected(id) {
|
|
||||||
return form.category_ids.includes(id);
|
|
||||||
}
|
|
||||||
const DAYS = [
|
|
||||||
{ key: "monday", label: "Hétfő" },
|
|
||||||
{ key: "tuesday", label: "Kedd" },
|
|
||||||
{ key: "wednesday", label: "Szerda" },
|
|
||||||
{ key: "thursday", label: "Csütörtök" },
|
|
||||||
{ key: "friday", label: "Péntek" },
|
|
||||||
{ key: "saturday", label: "Szombat" },
|
|
||||||
{ key: "sunday", label: "Vasárnap" }
|
|
||||||
];
|
|
||||||
return (_ctx, _push, _parent, _attrs) => {
|
|
||||||
const _component_TreeNode = _sfc_main$1;
|
|
||||||
_push(`<div${ssrRenderAttrs(_attrs)} data-v-4a0954df><div class="mb-8" data-v-4a0954df><button class="inline-flex items-center gap-1.5 text-sm text-slate-400 hover:text-white transition mb-4" data-v-4a0954df><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" data-v-4a0954df></path></svg> Vissza a szolgáltatóhoz </button><h1 class="text-2xl font-bold text-white" data-v-4a0954df>Szolgáltató szerkesztése</h1><p class="text-slate-400 mt-1" data-v-4a0954df>Szolgáltató #${ssrInterpolate(_ctx.$route.params.id)}</p></div>`);
|
|
||||||
if (loading.value) {
|
|
||||||
_push(`<div class="flex items-center justify-center py-20" data-v-4a0954df><div class="text-slate-400 flex items-center gap-3" data-v-4a0954df><svg class="w-5 h-5 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-4a0954df></path></svg><span data-v-4a0954df>Szolgáltató betöltése...</span></div></div>`);
|
|
||||||
} else if (error.value) {
|
|
||||||
_push(`<div class="bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8" data-v-4a0954df><p class="text-rose-400" data-v-4a0954df>Hiba történt a szolgáltató betöltése közben.</p><button class="mt-3 text-sm text-rose-300 hover:text-rose-200 underline" data-v-4a0954df>Újrapróbálkozás</button></div>`);
|
|
||||||
} else if (!provider.value) {
|
|
||||||
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-4a0954df><p class="text-slate-400 text-center py-12" data-v-4a0954df>A szolgáltató nem található.</p></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!--[--><div class="border-b border-slate-700 mb-6" data-v-4a0954df><nav class="flex gap-6 -mb-px" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(tabs, (tab) => {
|
|
||||||
_push(`<button class="${ssrRenderClass([activeTab.value === tab.key ? "text-indigo-400 border-indigo-400" : "text-slate-400 border-transparent hover:text-slate-300", "pb-3 text-sm font-medium border-b-2 transition flex items-center gap-2"])}" data-v-4a0954df>`);
|
|
||||||
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(tab.icon), { class: "w-4 h-4" }, null), _parent);
|
|
||||||
_push(` ${ssrInterpolate(tab.label)}</button>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></nav></div>`);
|
|
||||||
if (activeTab.value === "basic") {
|
|
||||||
_push(`<div class="max-w-3xl" data-v-4a0954df><form data-v-4a0954df><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-4a0954df><h2 class="text-lg font-semibold text-white mb-4" data-v-4a0954df>Alapadatok</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-4a0954df><div class="md:col-span-2" data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Név *</label><input${ssrRenderAttr("value", form.name)} required class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Kategória</label><input${ssrRenderAttr("value", form.category)} placeholder="pl. Autószerviz, Gumiszerviz" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Forrás</label><div class="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-slate-400 text-sm" data-v-4a0954df>${ssrInterpolate(provider.value.source)}</div></div></div></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-4a0954df><h2 class="text-lg font-semibold text-white mb-4" data-v-4a0954df>Elérhetőség</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-4a0954df><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Telefon</label><input${ssrRenderAttr("value", form.contact_phone)} placeholder="+36 30 123 4567" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Email</label><input${ssrRenderAttr("value", form.contact_email)} type="email" placeholder="info@example.com" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div class="md:col-span-2" data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Weboldal</label><input${ssrRenderAttr("value", form.website)} placeholder="https://..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div></div></div></form></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
if (activeTab.value === "matrix") {
|
|
||||||
_push(`<div class="max-w-4xl" data-v-4a0954df><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-4a0954df><h2 class="text-lg font-semibold text-white mb-2" data-v-4a0954df>3D Képesség Mátrix</h2><p class="text-sm text-slate-400 mb-6" data-v-4a0954df> Állítsd be, hogy a szolgáltató milyen járműosztályokhoz, szolgáltatási kategóriákhoz és specializációkhoz tartozik. </p><div class="mb-8" data-v-4a0954df><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-4a0954df><span class="w-6 h-6 rounded-full bg-indigo-500/20 text-indigo-400 flex items-center justify-center text-xs font-bold" data-v-4a0954df>A</span> Járműosztályok (Vehicle Classes) </h3><p class="text-xs text-slate-500 mb-3" data-v-4a0954df>Mely járműtípusokat szervizeli a szolgáltató?</p><div class="grid grid-cols-2 md:grid-cols-4 gap-3" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(VEHICLE_CLASSES, (vc) => {
|
|
||||||
_push(`<label class="${ssrRenderClass([form.supported_vehicle_classes.includes(vc.key) ? "bg-indigo-500/10 border-indigo-500/40 text-indigo-300" : "bg-slate-700/50 border-slate-600 hover:border-slate-500 text-slate-300", "flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition"])}" data-v-4a0954df><input type="checkbox"${ssrRenderAttr("value", vc.key)}${ssrIncludeBooleanAttr(form.supported_vehicle_classes.includes(vc.key)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-4a0954df><span class="text-sm" data-v-4a0954df>${ssrInterpolate(vc.label)}</span></label>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div></div><div class="mb-8" data-v-4a0954df><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-4a0954df><span class="w-6 h-6 rounded-full bg-emerald-500/20 text-emerald-400 flex items-center justify-center text-xs font-bold" data-v-4a0954df>B</span> Szolgáltatási Kategóriák (Expertise Tags) </h3><p class="text-xs text-slate-500 mb-3" data-v-4a0954df>Válaszd ki a szolgáltatóhoz tartozó kategóriákat a hierarchikus fából.</p>`);
|
|
||||||
if (treeLoading.value) {
|
|
||||||
_push(`<div class="flex items-center gap-2 text-sm text-slate-400 py-4" data-v-4a0954df><svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-4a0954df></path></svg><span data-v-4a0954df>Kategóriák betöltése...</span></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<div class="space-y-1 max-h-96 overflow-y-auto pr-2" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(categoryTree.value, (node) => {
|
|
||||||
_push(`<div class="ml-0" data-v-4a0954df><div class="flex items-center gap-2 py-1" data-v-4a0954df><button class="text-slate-500 hover:text-slate-300 transition w-4 h-4 flex items-center justify-center" data-v-4a0954df><svg class="${ssrRenderClass([expandedNodes.value.has(node.id) ? "rotate-90" : "", "w-3 h-3 transition-transform"])}" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" data-v-4a0954df></path></svg></button><label class="flex items-center gap-2 cursor-pointer flex-1" data-v-4a0954df><input type="checkbox"${ssrIncludeBooleanAttr(isCategorySelected(node.id)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-4a0954df><span class="text-sm font-medium text-white" data-v-4a0954df>${ssrInterpolate(node.name_hu || node.name_en || node.key)}</span><span class="text-xs text-slate-500" data-v-4a0954df>(Szint ${ssrInterpolate(node.level)})</span></label></div>`);
|
|
||||||
if (expandedNodes.value.has(node.id) && node.children?.length) {
|
|
||||||
_push(`<div class="ml-6 border-l border-slate-700 pl-3" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(node.children, (child) => {
|
|
||||||
_push(`<div data-v-4a0954df>`);
|
|
||||||
_push(ssrRenderComponent(_component_TreeNode, {
|
|
||||||
node: child,
|
|
||||||
"selected-ids": form.category_ids,
|
|
||||||
"expanded-ids": expandedNodes.value,
|
|
||||||
onToggle: toggleCategory,
|
|
||||||
onToggleExpand: toggleTreeNode
|
|
||||||
}, null, _parent));
|
|
||||||
_push(`</div>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
_push(`</div>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div>`);
|
|
||||||
}
|
|
||||||
if (form.category_ids.length > 0) {
|
|
||||||
_push(`<div class="mt-4 flex flex-wrap gap-2" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(form.category_ids, (id) => {
|
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-indigo-500/10 text-indigo-300 rounded-full text-xs" data-v-4a0954df>${ssrInterpolate(getCategoryName(id))} <button class="hover:text-white transition" data-v-4a0954df><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-4a0954df></path></svg></button></span>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
_push(`</div><div class="mb-4" data-v-4a0954df><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-4a0954df><span class="w-6 h-6 rounded-full bg-amber-500/20 text-amber-400 flex items-center justify-center text-xs font-bold" data-v-4a0954df>C</span> Specializációk </h3><p class="text-xs text-slate-500 mb-3" data-v-4a0954df>Adj meg speciális márkákat, hajtáslánc típusokat vagy egyéb címkéket.</p><div class="grid grid-cols-1 md:grid-cols-2 gap-6" data-v-4a0954df><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Márkák (Brands)</label><div class="flex flex-wrap gap-2 mb-2" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(form.specializations.brands, (brand, idx) => {
|
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-amber-500/10 text-amber-300 rounded-full text-xs" data-v-4a0954df>${ssrInterpolate(brand)} <button class="hover:text-white transition" data-v-4a0954df><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-4a0954df></path></svg></button></span>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div><div class="flex gap-2" data-v-4a0954df><input${ssrRenderAttr("value", brandInput.value)} placeholder="pl. Volvo, Scania" class="flex-1 px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df><button${ssrIncludeBooleanAttr(!brandInput.value.trim()) ? " disabled" : ""} class="px-3 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm transition" data-v-4a0954df> Hozzáad </button></div></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Hajtáslánc (Propulsion)</label><div class="flex flex-wrap gap-2 mb-2" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(form.specializations.propulsion, (prop, idx) => {
|
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-emerald-500/10 text-emerald-300 rounded-full text-xs" data-v-4a0954df>${ssrInterpolate(prop)} <button class="hover:text-white transition" data-v-4a0954df><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-4a0954df></path></svg></button></span>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div><div class="flex gap-2" data-v-4a0954df><input${ssrRenderAttr("value", propulsionInput.value)} placeholder="pl. EV, Hybrid, Diesel" class="flex-1 px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df><button${ssrIncludeBooleanAttr(!propulsionInput.value.trim()) ? " disabled" : ""} class="px-3 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm transition" data-v-4a0954df> Hozzáad </button></div></div></div></div></div></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
if (activeTab.value === "location") {
|
|
||||||
_push(`<div class="max-w-3xl" data-v-4a0954df><form data-v-4a0954df><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-4a0954df><h2 class="text-lg font-semibold text-white mb-4" data-v-4a0954df>Cím adatok</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-4a0954df><div class="md:col-span-2" data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Teljes cím</label><input${ssrRenderAttr("value", form.address)} placeholder="Teljes cím szövege" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Város</label><input${ssrRenderAttr("value", form.city)} placeholder="Budapest" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Irányítószám</label><input${ssrRenderAttr("value", form.address_zip)} placeholder="1011" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Utca</label><input${ssrRenderAttr("value", form.address_street_name)} placeholder="Egressy" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Házszám</label><input${ssrRenderAttr("value", form.address_house_number)} placeholder="4/b" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div><div class="md:col-span-2" data-v-4a0954df><label class="block text-sm font-medium text-slate-300 mb-1" data-v-4a0954df>Plus Code</label><input${ssrRenderAttr("value", form.plus_code)} placeholder="8FVC9X8V+XV" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-4a0954df></div></div></div></form></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
if (activeTab.value === "hours") {
|
|
||||||
_push(`<div class="max-w-3xl" data-v-4a0954df><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-4a0954df><h2 class="text-lg font-semibold text-white mb-2" data-v-4a0954df>Nyitvatartás</h2><p class="text-sm text-slate-400 mb-6" data-v-4a0954df> Állítsd be a szolgáltató nyitvatartási idejét napokra bontva. </p><div class="mb-6 p-4 rounded-lg border bg-indigo-500/5 border-indigo-500/20" data-v-4a0954df><label class="flex items-center gap-3 cursor-pointer" data-v-4a0954df><input type="checkbox"${ssrIncludeBooleanAttr(Array.isArray(form.is_always_open) ? ssrLooseContain(form.is_always_open, null) : form.is_always_open) ? " checked" : ""} class="w-5 h-5 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-4a0954df><div data-v-4a0954df><span class="text-sm font-medium text-white" data-v-4a0954df>Folyamatos (0-24) nyitvatartás</span><p class="text-xs text-slate-400 mt-0.5" data-v-4a0954df>A szolgáltató a hét minden napján 0-24 óráig nyitva van</p></div></label></div><div class="${ssrRenderClass([{ "opacity-50 pointer-events-none": form.is_always_open }, "flex flex-wrap gap-2 mb-6"])}" data-v-4a0954df><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-emerald-600/30 text-emerald-400 hover:bg-emerald-600/10 transition" data-v-4a0954df> 24/7 Folyamatos nyitvatartás </button><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-indigo-600/30 text-indigo-400 hover:bg-indigo-600/10" data-v-4a0954df> Hétköznapok másolása (Hétfő → K-P) </button><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-rose-600/30 text-rose-400 hover:bg-rose-600/10" data-v-4a0954df> Összes törlése </button></div><div class="${ssrRenderClass([{ "opacity-50 pointer-events-none": form.is_always_open }, "space-y-3"])}" data-v-4a0954df><!--[-->`);
|
|
||||||
ssrRenderList(DAYS, (day) => {
|
|
||||||
_push(`<div class="${ssrRenderClass([form.opening_hours[day.key] ? "bg-indigo-500/5 border-indigo-500/20" : "bg-slate-700/30 border-slate-600", "flex items-center gap-4 p-4 rounded-lg border"])}" data-v-4a0954df><label class="flex items-center gap-2 w-36 flex-shrink-0 cursor-pointer" data-v-4a0954df><input type="checkbox"${ssrIncludeBooleanAttr(!!form.opening_hours[day.key]) ? " checked" : ""}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-4a0954df><span class="text-sm font-medium text-white" data-v-4a0954df>${ssrInterpolate(day.label)}</span></label>`);
|
|
||||||
if (form.opening_hours[day.key]) {
|
|
||||||
_push(`<div class="flex items-center gap-2" data-v-4a0954df><input type="time"${ssrRenderAttr("value", form.opening_hours[day.key]?.open || "08:00")}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-28 px-2 py-1.5 bg-slate-700 border border-slate-600 rounded-lg text-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 disabled:opacity-50" data-v-4a0954df><span class="text-slate-500 text-sm" data-v-4a0954df>–</span><input type="time"${ssrRenderAttr("value", form.opening_hours[day.key]?.close || "17:00")}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-28 px-2 py-1.5 bg-slate-700 border border-slate-600 rounded-lg text-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 disabled:opacity-50" data-v-4a0954df></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<span class="text-sm text-slate-500 italic" data-v-4a0954df>Zárva</span>`);
|
|
||||||
}
|
|
||||||
_push(`</div>`);
|
|
||||||
});
|
|
||||||
_push(`<!--]--></div></div></div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
_push(`<div class="sticky bottom-0 bg-slate-900/90 backdrop-blur-sm border-t border-slate-700 -mx-6 px-6 py-4 mt-8" data-v-4a0954df><div class="flex items-center justify-between max-w-4xl" data-v-4a0954df><div class="text-sm text-slate-400" data-v-4a0954df>`);
|
|
||||||
if (hasChanges.value) {
|
|
||||||
_push(`<span class="text-amber-400" data-v-4a0954df>● Módosítások el nem mentve</span>`);
|
|
||||||
} else {
|
|
||||||
_push(`<span class="text-slate-500" data-v-4a0954df>Nincs változás</span>`);
|
|
||||||
}
|
|
||||||
_push(`</div><div class="flex gap-3" data-v-4a0954df><button class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-4a0954df> Mégse </button><button${ssrIncludeBooleanAttr(saveLoading.value || !hasChanges.value) ? " disabled" : ""} class="px-6 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-4a0954df>`);
|
|
||||||
if (saveLoading.value) {
|
|
||||||
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-4a0954df></path></svg>`);
|
|
||||||
} else {
|
|
||||||
_push(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-4a0954df><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-4a0954df></path></svg>`);
|
|
||||||
}
|
|
||||||
_push(` Mentés </button></div></div></div><!--]-->`);
|
|
||||||
}
|
|
||||||
if (toast.value) {
|
|
||||||
_push(`<div class="${ssrRenderClass([toast.value.type === "success" ? "bg-emerald-600 text-white" : "bg-rose-600 text-white", "fixed top-4 right-4 z-50 px-4 py-3 rounded-lg shadow-xl text-sm font-medium transition-all duration-300"])}" data-v-4a0954df>${ssrInterpolate(toast.value.message)}</div>`);
|
|
||||||
} else {
|
|
||||||
_push(`<!---->`);
|
|
||||||
}
|
|
||||||
_push(`</div>`);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const _sfc_setup = _sfc_main.setup;
|
|
||||||
_sfc_main.setup = (props, ctx) => {
|
|
||||||
const ssrContext = useSSRContext();
|
|
||||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/providers/[id]/edit.vue");
|
|
||||||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
|
||||||
};
|
|
||||||
const edit = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4a0954df"]]);
|
|
||||||
export {
|
|
||||||
edit as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=edit-DQMBygGu.js.map
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
503
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js
vendored
Normal file
503
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js
vendored
Normal file
@@ -0,0 +1,503 @@
|
|||||||
|
import { defineComponent, useSSRContext, ref, computed, watch, mergeProps, reactive, createVNode, resolveDynamicComponent } from "vue";
|
||||||
|
import { ssrRenderAttrs, ssrRenderClass, ssrIncludeBooleanAttr, ssrInterpolate, ssrRenderList, ssrRenderComponent, ssrRenderAttr, ssrRenderVNode, ssrLooseContain } from "vue/server-renderer";
|
||||||
|
import "/app/node_modules/klona/dist/index.mjs";
|
||||||
|
import "/app/node_modules/hookable/dist/index.mjs";
|
||||||
|
import "../server.mjs";
|
||||||
|
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import "/app/node_modules/ofetch/dist/node.mjs";
|
||||||
|
import "#internal/nuxt/paths";
|
||||||
|
import "/app/node_modules/unctx/dist/index.mjs";
|
||||||
|
import "/app/node_modules/h3/dist/index.mjs";
|
||||||
|
import "pinia";
|
||||||
|
import "/app/node_modules/defu/dist/defu.mjs";
|
||||||
|
import "/app/node_modules/ufo/dist/index.mjs";
|
||||||
|
import "/app/node_modules/cookie-es/dist/index.mjs";
|
||||||
|
import "/app/node_modules/destr/dist/index.mjs";
|
||||||
|
import "/app/node_modules/ohash/dist/index.mjs";
|
||||||
|
import "/app/node_modules/@unhead/vue/dist/index.mjs";
|
||||||
|
import "@vue/devtools-api";
|
||||||
|
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "TreeNode",
|
||||||
|
__ssrInlineRender: true,
|
||||||
|
props: {
|
||||||
|
node: {},
|
||||||
|
selectedIds: {},
|
||||||
|
expandedIds: {}
|
||||||
|
},
|
||||||
|
emits: ["toggle", "toggle-expand"],
|
||||||
|
setup(__props) {
|
||||||
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
|
const _component_TreeNode = _sfc_main$3;
|
||||||
|
_push(`<div${ssrRenderAttrs(_attrs)}><div class="flex items-center gap-2 py-1"><button class="text-slate-500 hover:text-slate-300 transition w-4 h-4 flex items-center justify-center"><svg class="${ssrRenderClass([__props.expandedIds.has(__props.node.id) ? "rotate-90" : "", "w-3 h-3 transition-transform"])}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></button><label class="flex items-center gap-2 cursor-pointer flex-1"><input type="checkbox"${ssrIncludeBooleanAttr(__props.selectedIds.includes(__props.node.id)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50"><span class="text-sm text-slate-300">${ssrInterpolate(__props.node.name_hu || __props.node.name_en || __props.node.key)}</span><span class="text-xs text-slate-500">(Szint ${ssrInterpolate(__props.node.level)})</span></label></div>`);
|
||||||
|
if (__props.expandedIds.has(__props.node.id) && __props.node.children?.length) {
|
||||||
|
_push(`<div class="ml-6 border-l border-slate-700 pl-3"><!--[-->`);
|
||||||
|
ssrRenderList(__props.node.children, (child) => {
|
||||||
|
_push(`<div>`);
|
||||||
|
_push(ssrRenderComponent(_component_TreeNode, {
|
||||||
|
node: child,
|
||||||
|
"selected-ids": __props.selectedIds,
|
||||||
|
"expanded-ids": __props.expandedIds,
|
||||||
|
onToggle: (id) => _ctx.$emit("toggle", id),
|
||||||
|
onToggleExpand: (id) => _ctx.$emit("toggle-expand", id)
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`</div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const _sfc_setup$3 = _sfc_main$3.setup;
|
||||||
|
_sfc_main$3.setup = (props, ctx) => {
|
||||||
|
const ssrContext = useSSRContext();
|
||||||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/TreeNode.vue");
|
||||||
|
return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
|
||||||
|
};
|
||||||
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "SmartLocationInput",
|
||||||
|
__ssrInlineRender: true,
|
||||||
|
props: {
|
||||||
|
modelValue: { default: null },
|
||||||
|
label: { default: "" },
|
||||||
|
placeholder: { default: "Kezdj el gépelni (irányítószám vagy város)..." },
|
||||||
|
minChars: { default: 2 },
|
||||||
|
countryCode: { default: "HU" },
|
||||||
|
debounceMs: { default: 300 }
|
||||||
|
},
|
||||||
|
emits: ["update:modelValue", "select"],
|
||||||
|
setup(__props, { emit: __emit }) {
|
||||||
|
const props = __props;
|
||||||
|
ref(null);
|
||||||
|
const query = ref("");
|
||||||
|
const selectedItem = ref(props.modelValue);
|
||||||
|
const items = ref([]);
|
||||||
|
const searching = ref(false);
|
||||||
|
const showDropdown = ref(false);
|
||||||
|
const highlightedIndex = ref(0);
|
||||||
|
const displayText = computed(() => {
|
||||||
|
if (selectedItem.value) {
|
||||||
|
return `${selectedItem.value.zip_code} ${selectedItem.value.city}`;
|
||||||
|
}
|
||||||
|
return query.value;
|
||||||
|
});
|
||||||
|
const filteredItems = computed(() => {
|
||||||
|
if (!query.value || query.value.length < props.minChars) return [];
|
||||||
|
const q = query.value.toLowerCase();
|
||||||
|
return items.value.filter(
|
||||||
|
(item) => item.zip_code.toLowerCase().includes(q) || item.city.toLowerCase().includes(q)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(val) => {
|
||||||
|
selectedItem.value = val;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
|
_push(`<div${ssrRenderAttrs(mergeProps({ class: "relative" }, _attrs))} data-v-b43e13ca>`);
|
||||||
|
if (__props.label) {
|
||||||
|
_push(`<label class="block text-sm font-medium text-slate-300 mb-1" data-v-b43e13ca>${ssrInterpolate(__props.label)}</label>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`<div class="relative" data-v-b43e13ca><input${ssrRenderAttr("value", displayText.value)}${ssrRenderAttr("placeholder", __props.placeholder)} class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-b43e13ca>`);
|
||||||
|
if (searching.value) {
|
||||||
|
_push(`<svg class="absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 animate-spin text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-b43e13ca><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-b43e13ca></path></svg>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (selectedItem.value && !searching.value) {
|
||||||
|
_push(`<button class="absolute right-3 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white transition" type="button" data-v-b43e13ca><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-b43e13ca><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-b43e13ca></path></svg></button>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
if (showDropdown.value && filteredItems.value.length > 0) {
|
||||||
|
_push(`<div class="absolute z-50 mt-1 w-full bg-slate-800 border border-slate-600 rounded-lg shadow-xl max-h-60 overflow-y-auto" data-v-b43e13ca><!--[-->`);
|
||||||
|
ssrRenderList(filteredItems.value, (item, index) => {
|
||||||
|
_push(`<button class="${ssrRenderClass([index === highlightedIndex.value ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-slate-700", "w-full text-left px-3 py-2 text-sm transition flex items-center gap-2"])}" data-v-b43e13ca><span class="font-mono text-indigo-400" data-v-b43e13ca>${ssrInterpolate(item.zip_code)}</span><span data-v-b43e13ca>${ssrInterpolate(item.city)}</span><span class="text-xs text-slate-500 ml-auto" data-v-b43e13ca>${ssrInterpolate(item.country_code)}</span></button>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (showDropdown.value && query.value.length >= __props.minChars && filteredItems.value.length === 0 && !searching.value) {
|
||||||
|
_push(`<div class="absolute z-50 mt-1 w-full bg-slate-800 border border-slate-600 rounded-lg shadow-xl p-3 text-sm text-slate-400" data-v-b43e13ca> Nincs találat </div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const _sfc_setup$2 = _sfc_main$2.setup;
|
||||||
|
_sfc_main$2.setup = (props, ctx) => {
|
||||||
|
const ssrContext = useSSRContext();
|
||||||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/SmartLocationInput.vue");
|
||||||
|
return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
|
||||||
|
};
|
||||||
|
const __nuxt_component_0 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b43e13ca"]]);
|
||||||
|
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "SharedAddressForm",
|
||||||
|
__ssrInlineRender: true,
|
||||||
|
props: {
|
||||||
|
modelValue: { default: () => ({
|
||||||
|
zip: null,
|
||||||
|
city: null,
|
||||||
|
street_name: null,
|
||||||
|
street_type: null,
|
||||||
|
house_number: null,
|
||||||
|
stairwell: null,
|
||||||
|
floor: null,
|
||||||
|
door: null,
|
||||||
|
parcel_id: null,
|
||||||
|
full_address_text: null,
|
||||||
|
latitude: null,
|
||||||
|
longitude: null
|
||||||
|
}) }
|
||||||
|
},
|
||||||
|
emits: ["update:modelValue"],
|
||||||
|
setup(__props, { emit: __emit }) {
|
||||||
|
const props = __props;
|
||||||
|
const emit = __emit;
|
||||||
|
const selectedLocation = computed(() => {
|
||||||
|
if (props.modelValue?.zip && props.modelValue?.city) {
|
||||||
|
return {
|
||||||
|
id: 0,
|
||||||
|
// We don't have the DB id here, but SmartLocationInput handles this
|
||||||
|
zip_code: props.modelValue.zip,
|
||||||
|
city: props.modelValue.city,
|
||||||
|
country_code: "HU"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
function onLocationSelected(location) {
|
||||||
|
const updated = { ...props.modelValue };
|
||||||
|
if (location) {
|
||||||
|
updated.zip = location.zip_code;
|
||||||
|
updated.city = location.city;
|
||||||
|
} else {
|
||||||
|
updated.zip = null;
|
||||||
|
updated.city = null;
|
||||||
|
}
|
||||||
|
emit("update:modelValue", updated);
|
||||||
|
}
|
||||||
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
|
const _component_SmartLocationInput = __nuxt_component_0;
|
||||||
|
_push(`<div${ssrRenderAttrs(_attrs)}><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6"><h2 class="text-lg font-semibold text-white mb-4">Cím adatok</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4"><div class="md:col-span-2">`);
|
||||||
|
_push(ssrRenderComponent(_component_SmartLocationInput, {
|
||||||
|
"model-value": selectedLocation.value,
|
||||||
|
"onUpdate:modelValue": onLocationSelected,
|
||||||
|
label: "Irányítószám / Város",
|
||||||
|
placeholder: "Kezdj el gépelni (pl. 1011 vagy Budapest)..."
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`</div><div><label class="block text-sm font-medium text-slate-300 mb-1">Utca neve</label><input${ssrRenderAttr("value", __props.modelValue.street_name)} placeholder="pl. Egressy" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Közterület jellege</label><select${ssrRenderAttr("value", __props.modelValue.street_type)} class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"><option value="">Válassz...</option><option value="utca">utca</option><option value="út">út</option><option value="tér">tér</option><option value="körút">körút</option><option value="sugárút">sugárút</option><option value="köz">köz</option><option value="sétány">sétány</option><option value="lakópark">lakópark</option><option value="liget">liget</option><option value="erdő">erdő</option><option value="dűlő">dűlő</option><option value="major">major</option><option value="puszta">puszta</option><option value="sziget">sziget</option><option value="telep">telep</option></select></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Házszám</label><input${ssrRenderAttr("value", __props.modelValue.house_number)} placeholder="pl. 4/b" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Lépcsőház</label><input${ssrRenderAttr("value", __props.modelValue.stairwell)} placeholder="pl. 1" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Emelet</label><input${ssrRenderAttr("value", __props.modelValue.floor)} placeholder="pl. 3" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Ajtó</label><input${ssrRenderAttr("value", __props.modelValue.door)} placeholder="pl. A" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div><div><label class="block text-sm font-medium text-slate-300 mb-1">Helyrajzi szám (hrsz)</label><input${ssrRenderAttr("value", __props.modelValue.parcel_id)} placeholder="pl. 12345/6" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm"></div></div></div></div>`);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const _sfc_setup$1 = _sfc_main$1.setup;
|
||||||
|
_sfc_main$1.setup = (props, ctx) => {
|
||||||
|
const ssrContext = useSSRContext();
|
||||||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/SharedAddressForm.vue");
|
||||||
|
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
||||||
|
};
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "edit",
|
||||||
|
__ssrInlineRender: true,
|
||||||
|
setup(__props) {
|
||||||
|
const VEHICLE_CLASSES = [
|
||||||
|
{ key: "car", label: "Személyautó" },
|
||||||
|
{ key: "motorcycle", label: "Motorkerékpár" },
|
||||||
|
{ key: "truck", label: "Teherautó" },
|
||||||
|
{ key: "hgv", label: "Nehézgépjármű (HGV)" },
|
||||||
|
{ key: "light_commercial", label: "Kishaszonjármű" },
|
||||||
|
{ key: "personal", label: "Személyes" },
|
||||||
|
{ key: "boat", label: "Csónak/Vízi" },
|
||||||
|
{ key: "other", label: "Egyéb" }
|
||||||
|
];
|
||||||
|
const route = useRoute();
|
||||||
|
useRouter();
|
||||||
|
computed(() => Number(route.params.id));
|
||||||
|
const loading = ref(true);
|
||||||
|
const error = ref(false);
|
||||||
|
const provider = ref(null);
|
||||||
|
const saveLoading = ref(false);
|
||||||
|
const toast = ref(null);
|
||||||
|
const activeTab = ref("basic");
|
||||||
|
const tabs = [
|
||||||
|
{ key: "basic", label: "Alapadatok & Kapcsolat", icon: "svg" },
|
||||||
|
{ key: "matrix", label: "Szolgáltatások & Járművek", icon: "svg" },
|
||||||
|
{ key: "location", label: "Helyszín & Lokáció", icon: "svg" },
|
||||||
|
{ key: "hours", label: "Nyitvatartás", icon: "svg" }
|
||||||
|
];
|
||||||
|
const categoryTree = ref([]);
|
||||||
|
const treeLoading = ref(false);
|
||||||
|
const expandedNodes = ref(/* @__PURE__ */ new Set());
|
||||||
|
const brandInput = ref("");
|
||||||
|
const propulsionInput = ref("");
|
||||||
|
const form = reactive({
|
||||||
|
name: "",
|
||||||
|
address: "",
|
||||||
|
city: "",
|
||||||
|
address_zip: "",
|
||||||
|
address_street_name: "",
|
||||||
|
address_street_type: "",
|
||||||
|
address_house_number: "",
|
||||||
|
plus_code: "",
|
||||||
|
contact_phone: "",
|
||||||
|
contact_email: "",
|
||||||
|
website: "",
|
||||||
|
category: "",
|
||||||
|
category_ids: [],
|
||||||
|
supported_vehicle_classes: [],
|
||||||
|
specializations: {
|
||||||
|
brands: [],
|
||||||
|
propulsion: []
|
||||||
|
},
|
||||||
|
opening_hours: {},
|
||||||
|
is_always_open: false,
|
||||||
|
// Nested address object matching AddressIn schema (used by SharedAddressForm)
|
||||||
|
address: {
|
||||||
|
zip: "",
|
||||||
|
city: "",
|
||||||
|
street_name: "",
|
||||||
|
street_type: "",
|
||||||
|
house_number: "",
|
||||||
|
stairwell: "",
|
||||||
|
floor: "",
|
||||||
|
door: "",
|
||||||
|
parcel_id: "",
|
||||||
|
full_address_text: "",
|
||||||
|
latitude: null,
|
||||||
|
longitude: null
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const hasChanges = computed(() => {
|
||||||
|
if (!provider.value) return false;
|
||||||
|
const p = provider.value;
|
||||||
|
if (form.name !== (p.name || "")) return true;
|
||||||
|
if (form.address !== (p.address || "")) return true;
|
||||||
|
if (form.plus_code !== (p.plus_code || "")) return true;
|
||||||
|
if (form.address.zip !== (p.address_zip || "")) return true;
|
||||||
|
if (form.address.city !== (p.city || "")) return true;
|
||||||
|
if (form.address.street_name !== (p.address_street_name || "")) return true;
|
||||||
|
if (form.address.street_type !== (p.address_street_type || "")) return true;
|
||||||
|
if (form.address.house_number !== (p.address_house_number || "")) return true;
|
||||||
|
if (form.contact_phone !== (p.contact_phone || "")) return true;
|
||||||
|
if (form.contact_email !== (p.contact_email || "")) return true;
|
||||||
|
if (form.website !== (p.website || "")) return true;
|
||||||
|
if (form.category !== (p.category || "")) return true;
|
||||||
|
const sortedFormCategories = [...form.category_ids].sort();
|
||||||
|
const sortedOrigCategories = [...p.category_ids || []].sort();
|
||||||
|
if (JSON.stringify(sortedFormCategories) !== JSON.stringify(sortedOrigCategories)) return true;
|
||||||
|
const sortedFormClasses = [...form.supported_vehicle_classes].sort();
|
||||||
|
const sortedOrigClasses = [...p.supported_vehicle_classes || []].sort();
|
||||||
|
if (JSON.stringify(sortedFormClasses) !== JSON.stringify(sortedOrigClasses)) return true;
|
||||||
|
const normalizeSpec = (spec) => ({
|
||||||
|
brands: Array.isArray(spec?.brands) ? [...spec.brands].sort() : [],
|
||||||
|
propulsion: Array.isArray(spec?.propulsion) ? [...spec.propulsion].sort() : []
|
||||||
|
});
|
||||||
|
if (JSON.stringify(normalizeSpec(form.specializations)) !== JSON.stringify(normalizeSpec(p.specializations))) return true;
|
||||||
|
const DAYS2 = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
|
||||||
|
const normalizeHours = (hours) => {
|
||||||
|
const result = {};
|
||||||
|
const daysSource = hours?.days || hours;
|
||||||
|
for (const day of DAYS2) {
|
||||||
|
const slot = daysSource?.[day];
|
||||||
|
if (slot && typeof slot === "object" && slot.open && slot.close) {
|
||||||
|
result[day] = { open: slot.open, close: slot.close };
|
||||||
|
} else {
|
||||||
|
result[day] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
if (JSON.stringify(normalizeHours(form.opening_hours)) !== JSON.stringify(normalizeHours(p.opening_hours))) return true;
|
||||||
|
if (form.is_always_open !== (p.opening_hours?.always_open === true)) return true;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function findCategoryById(id, nodes) {
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (node.id === id) return node;
|
||||||
|
if (node.children?.length) {
|
||||||
|
const found = findCategoryById(id, node.children);
|
||||||
|
if (found) return found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
function getCategoryName(id) {
|
||||||
|
const node = findCategoryById(id, categoryTree.value);
|
||||||
|
if (!node) return `#${id}`;
|
||||||
|
return node.name_hu || node.name_en || node.key;
|
||||||
|
}
|
||||||
|
function toggleCategory(id) {
|
||||||
|
const idx = form.category_ids.indexOf(id);
|
||||||
|
if (idx >= 0) {
|
||||||
|
form.category_ids.splice(idx, 1);
|
||||||
|
} else {
|
||||||
|
form.category_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function toggleTreeNode(id) {
|
||||||
|
const newSet = new Set(expandedNodes.value);
|
||||||
|
if (newSet.has(id)) {
|
||||||
|
newSet.delete(id);
|
||||||
|
} else {
|
||||||
|
newSet.add(id);
|
||||||
|
}
|
||||||
|
expandedNodes.value = newSet;
|
||||||
|
}
|
||||||
|
function isCategorySelected(id) {
|
||||||
|
return form.category_ids.includes(id);
|
||||||
|
}
|
||||||
|
const DAYS = [
|
||||||
|
{ key: "monday", label: "Hétfő" },
|
||||||
|
{ key: "tuesday", label: "Kedd" },
|
||||||
|
{ key: "wednesday", label: "Szerda" },
|
||||||
|
{ key: "thursday", label: "Csütörtök" },
|
||||||
|
{ key: "friday", label: "Péntek" },
|
||||||
|
{ key: "saturday", label: "Szombat" },
|
||||||
|
{ key: "sunday", label: "Vasárnap" }
|
||||||
|
];
|
||||||
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
|
const _component_TreeNode = _sfc_main$3;
|
||||||
|
const _component_SharedAddressForm = _sfc_main$1;
|
||||||
|
_push(`<div${ssrRenderAttrs(_attrs)} data-v-ab22d560><div class="mb-8" data-v-ab22d560><button class="inline-flex items-center gap-1.5 text-sm text-slate-400 hover:text-white transition mb-4" data-v-ab22d560><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" data-v-ab22d560></path></svg> Vissza a szolgáltatóhoz </button><h1 class="text-2xl font-bold text-white" data-v-ab22d560>Szolgáltató szerkesztése</h1><p class="text-slate-400 mt-1" data-v-ab22d560>Szolgáltató #${ssrInterpolate(_ctx.$route.params.id)}</p></div>`);
|
||||||
|
if (loading.value) {
|
||||||
|
_push(`<div class="flex items-center justify-center py-20" data-v-ab22d560><div class="text-slate-400 flex items-center gap-3" data-v-ab22d560><svg class="w-5 h-5 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-ab22d560></path></svg><span data-v-ab22d560>Szolgáltató betöltése...</span></div></div>`);
|
||||||
|
} else if (error.value) {
|
||||||
|
_push(`<div class="bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8" data-v-ab22d560><p class="text-rose-400" data-v-ab22d560>Hiba történt a szolgáltató betöltése közben.</p><button class="mt-3 text-sm text-rose-300 hover:text-rose-200 underline" data-v-ab22d560>Újrapróbálkozás</button></div>`);
|
||||||
|
} else if (!provider.value) {
|
||||||
|
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-ab22d560><p class="text-slate-400 text-center py-12" data-v-ab22d560>A szolgáltató nem található.</p></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!--[--><div class="border-b border-slate-700 mb-6" data-v-ab22d560><nav class="flex gap-6 -mb-px" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(tabs, (tab) => {
|
||||||
|
_push(`<button class="${ssrRenderClass([activeTab.value === tab.key ? "text-indigo-400 border-indigo-400" : "text-slate-400 border-transparent hover:text-slate-300", "pb-3 text-sm font-medium border-b-2 transition flex items-center gap-2"])}" data-v-ab22d560>`);
|
||||||
|
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(tab.icon), { class: "w-4 h-4" }, null), _parent);
|
||||||
|
_push(` ${ssrInterpolate(tab.label)}</button>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></nav></div>`);
|
||||||
|
if (activeTab.value === "basic") {
|
||||||
|
_push(`<div class="max-w-3xl" data-v-ab22d560><form data-v-ab22d560><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-ab22d560><h2 class="text-lg font-semibold text-white mb-4" data-v-ab22d560>Alapadatok</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-ab22d560><div class="md:col-span-2" data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Név *</label><input${ssrRenderAttr("value", form.name)} required class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Kategória</label><input${ssrRenderAttr("value", form.category)} placeholder="pl. Autószerviz, Gumiszerviz" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Forrás</label><div class="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-slate-400 text-sm" data-v-ab22d560>${ssrInterpolate(provider.value.source)}</div></div></div></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-ab22d560><h2 class="text-lg font-semibold text-white mb-4" data-v-ab22d560>Elérhetőség</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-ab22d560><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Telefon</label><input${ssrRenderAttr("value", form.contact_phone)} placeholder="+36 30 123 4567" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Email</label><input${ssrRenderAttr("value", form.contact_email)} type="email" placeholder="info@example.com" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div><div class="md:col-span-2" data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Weboldal</label><input${ssrRenderAttr("value", form.website)} placeholder="https://..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div></div></div></form></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (activeTab.value === "matrix") {
|
||||||
|
_push(`<div class="max-w-4xl" data-v-ab22d560><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-ab22d560><h2 class="text-lg font-semibold text-white mb-2" data-v-ab22d560>3D Képesség Mátrix</h2><p class="text-sm text-slate-400 mb-6" data-v-ab22d560> Állítsd be, hogy a szolgáltató milyen járműosztályokhoz, szolgáltatási kategóriákhoz és specializációkhoz tartozik. </p><div class="mb-8" data-v-ab22d560><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-ab22d560><span class="w-6 h-6 rounded-full bg-indigo-500/20 text-indigo-400 flex items-center justify-center text-xs font-bold" data-v-ab22d560>A</span> Járműosztályok (Vehicle Classes) </h3><p class="text-xs text-slate-500 mb-3" data-v-ab22d560>Mely járműtípusokat szervizeli a szolgáltató?</p><div class="grid grid-cols-2 md:grid-cols-4 gap-3" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(VEHICLE_CLASSES, (vc) => {
|
||||||
|
_push(`<label class="${ssrRenderClass([form.supported_vehicle_classes.includes(vc.key) ? "bg-indigo-500/10 border-indigo-500/40 text-indigo-300" : "bg-slate-700/50 border-slate-600 hover:border-slate-500 text-slate-300", "flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition"])}" data-v-ab22d560><input type="checkbox"${ssrRenderAttr("value", vc.key)}${ssrIncludeBooleanAttr(form.supported_vehicle_classes.includes(vc.key)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-ab22d560><span class="text-sm" data-v-ab22d560>${ssrInterpolate(vc.label)}</span></label>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div></div><div class="mb-8" data-v-ab22d560><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-ab22d560><span class="w-6 h-6 rounded-full bg-emerald-500/20 text-emerald-400 flex items-center justify-center text-xs font-bold" data-v-ab22d560>B</span> Szolgáltatási Kategóriák (Expertise Tags) </h3><p class="text-xs text-slate-500 mb-3" data-v-ab22d560>Válaszd ki a szolgáltatóhoz tartozó kategóriákat a hierarchikus fából.</p>`);
|
||||||
|
if (treeLoading.value) {
|
||||||
|
_push(`<div class="flex items-center gap-2 text-sm text-slate-400 py-4" data-v-ab22d560><svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-ab22d560></path></svg><span data-v-ab22d560>Kategóriák betöltése...</span></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<div class="space-y-1 max-h-96 overflow-y-auto pr-2" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(categoryTree.value, (node) => {
|
||||||
|
_push(`<div class="ml-0" data-v-ab22d560><div class="flex items-center gap-2 py-1" data-v-ab22d560><button class="text-slate-500 hover:text-slate-300 transition w-4 h-4 flex items-center justify-center" data-v-ab22d560><svg class="${ssrRenderClass([expandedNodes.value.has(node.id) ? "rotate-90" : "", "w-3 h-3 transition-transform"])}" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" data-v-ab22d560></path></svg></button><label class="flex items-center gap-2 cursor-pointer flex-1" data-v-ab22d560><input type="checkbox"${ssrIncludeBooleanAttr(isCategorySelected(node.id)) ? " checked" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-ab22d560><span class="text-sm font-medium text-white" data-v-ab22d560>${ssrInterpolate(node.name_hu || node.name_en || node.key)}</span><span class="text-xs text-slate-500" data-v-ab22d560>(Szint ${ssrInterpolate(node.level)})</span></label></div>`);
|
||||||
|
if (expandedNodes.value.has(node.id) && node.children?.length) {
|
||||||
|
_push(`<div class="ml-6 border-l border-slate-700 pl-3" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(node.children, (child) => {
|
||||||
|
_push(`<div data-v-ab22d560>`);
|
||||||
|
_push(ssrRenderComponent(_component_TreeNode, {
|
||||||
|
node: child,
|
||||||
|
"selected-ids": form.category_ids,
|
||||||
|
"expanded-ids": expandedNodes.value,
|
||||||
|
onToggle: toggleCategory,
|
||||||
|
onToggleExpand: toggleTreeNode
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`</div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
}
|
||||||
|
if (form.category_ids.length > 0) {
|
||||||
|
_push(`<div class="mt-4 flex flex-wrap gap-2" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(form.category_ids, (id) => {
|
||||||
|
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-indigo-500/10 text-indigo-300 rounded-full text-xs" data-v-ab22d560>${ssrInterpolate(getCategoryName(id))} <button class="hover:text-white transition" data-v-ab22d560><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-ab22d560></path></svg></button></span>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div><div class="mb-4" data-v-ab22d560><h3 class="text-md font-medium text-white mb-3 flex items-center gap-2" data-v-ab22d560><span class="w-6 h-6 rounded-full bg-amber-500/20 text-amber-400 flex items-center justify-center text-xs font-bold" data-v-ab22d560>C</span> Specializációk </h3><p class="text-xs text-slate-500 mb-3" data-v-ab22d560>Adj meg speciális márkákat, hajtáslánc típusokat vagy egyéb címkéket.</p><div class="grid grid-cols-1 md:grid-cols-2 gap-6" data-v-ab22d560><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Márkák (Brands)</label><div class="flex flex-wrap gap-2 mb-2" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(form.specializations.brands, (brand, idx) => {
|
||||||
|
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-amber-500/10 text-amber-300 rounded-full text-xs" data-v-ab22d560>${ssrInterpolate(brand)} <button class="hover:text-white transition" data-v-ab22d560><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-ab22d560></path></svg></button></span>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div><div class="flex gap-2" data-v-ab22d560><input${ssrRenderAttr("value", brandInput.value)} placeholder="pl. Volvo, Scania" class="flex-1 px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560><button${ssrIncludeBooleanAttr(!brandInput.value.trim()) ? " disabled" : ""} class="px-3 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm transition" data-v-ab22d560> Hozzáad </button></div></div><div data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Hajtáslánc (Propulsion)</label><div class="flex flex-wrap gap-2 mb-2" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(form.specializations.propulsion, (prop, idx) => {
|
||||||
|
_push(`<span class="inline-flex items-center gap-1 px-2 py-1 bg-emerald-500/10 text-emerald-300 rounded-full text-xs" data-v-ab22d560>${ssrInterpolate(prop)} <button class="hover:text-white transition" data-v-ab22d560><svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-ab22d560></path></svg></button></span>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div><div class="flex gap-2" data-v-ab22d560><input${ssrRenderAttr("value", propulsionInput.value)} placeholder="pl. EV, Hybrid, Diesel" class="flex-1 px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560><button${ssrIncludeBooleanAttr(!propulsionInput.value.trim()) ? " disabled" : ""} class="px-3 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm transition" data-v-ab22d560> Hozzáad </button></div></div></div></div></div></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (activeTab.value === "location") {
|
||||||
|
_push(`<div class="max-w-3xl" data-v-ab22d560><form data-v-ab22d560>`);
|
||||||
|
_push(ssrRenderComponent(_component_SharedAddressForm, {
|
||||||
|
modelValue: form.address,
|
||||||
|
"onUpdate:modelValue": ($event) => form.address = $event
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-ab22d560><h2 class="text-lg font-semibold text-white mb-4" data-v-ab22d560>További helyszín adatok</h2><div class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-ab22d560><div class="md:col-span-2" data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Teljes cím szövege</label><input${ssrRenderAttr("value", form.address.full_address_text)} placeholder="Teljes cím szövege" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div><div class="md:col-span-2" data-v-ab22d560><label class="block text-sm font-medium text-slate-300 mb-1" data-v-ab22d560>Plus Code</label><input${ssrRenderAttr("value", form.plus_code)} placeholder="8FVC9X8V+XV" class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-ab22d560></div></div></div></form></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (activeTab.value === "hours") {
|
||||||
|
_push(`<div class="max-w-3xl" data-v-ab22d560><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 mb-6" data-v-ab22d560><h2 class="text-lg font-semibold text-white mb-2" data-v-ab22d560>Nyitvatartás</h2><p class="text-sm text-slate-400 mb-6" data-v-ab22d560> Állítsd be a szolgáltató nyitvatartási idejét napokra bontva. </p><div class="mb-6 p-4 rounded-lg border bg-indigo-500/5 border-indigo-500/20" data-v-ab22d560><label class="flex items-center gap-3 cursor-pointer" data-v-ab22d560><input type="checkbox"${ssrIncludeBooleanAttr(Array.isArray(form.is_always_open) ? ssrLooseContain(form.is_always_open, null) : form.is_always_open) ? " checked" : ""} class="w-5 h-5 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-ab22d560><div data-v-ab22d560><span class="text-sm font-medium text-white" data-v-ab22d560>Folyamatos (0-24) nyitvatartás</span><p class="text-xs text-slate-400 mt-0.5" data-v-ab22d560>A szolgáltató a hét minden napján 0-24 óráig nyitva van</p></div></label></div><div class="${ssrRenderClass([{ "opacity-50 pointer-events-none": form.is_always_open }, "flex flex-wrap gap-2 mb-6"])}" data-v-ab22d560><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-emerald-600/30 text-emerald-400 hover:bg-emerald-600/10 transition" data-v-ab22d560> 24/7 Folyamatos nyitvatartás </button><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-indigo-600/30 text-indigo-400 hover:bg-indigo-600/10" data-v-ab22d560> Hétköznapok másolása (Hétfő → K-P) </button><button class="px-3 py-1.5 text-xs font-medium rounded-lg border border-rose-600/30 text-rose-400 hover:bg-rose-600/10" data-v-ab22d560> Összes törlése </button></div><div class="${ssrRenderClass([{ "opacity-50 pointer-events-none": form.is_always_open }, "space-y-3"])}" data-v-ab22d560><!--[-->`);
|
||||||
|
ssrRenderList(DAYS, (day) => {
|
||||||
|
_push(`<div class="${ssrRenderClass([form.opening_hours[day.key] ? "bg-indigo-500/5 border-indigo-500/20" : "bg-slate-700/30 border-slate-600", "flex items-center gap-4 p-4 rounded-lg border"])}" data-v-ab22d560><label class="flex items-center gap-2 w-36 flex-shrink-0 cursor-pointer" data-v-ab22d560><input type="checkbox"${ssrIncludeBooleanAttr(!!form.opening_hours[day.key]) ? " checked" : ""}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-4 h-4 rounded border-slate-500 bg-slate-700 text-indigo-500 focus:ring-indigo-500/50" data-v-ab22d560><span class="text-sm font-medium text-white" data-v-ab22d560>${ssrInterpolate(day.label)}</span></label>`);
|
||||||
|
if (form.opening_hours[day.key]) {
|
||||||
|
_push(`<div class="flex items-center gap-2" data-v-ab22d560><input type="time"${ssrRenderAttr("value", form.opening_hours[day.key]?.open || "08:00")}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-28 px-2 py-1.5 bg-slate-700 border border-slate-600 rounded-lg text-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 disabled:opacity-50" data-v-ab22d560><span class="text-slate-500 text-sm" data-v-ab22d560>–</span><input type="time"${ssrRenderAttr("value", form.opening_hours[day.key]?.close || "17:00")}${ssrIncludeBooleanAttr(form.is_always_open) ? " disabled" : ""} class="w-28 px-2 py-1.5 bg-slate-700 border border-slate-600 rounded-lg text-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 disabled:opacity-50" data-v-ab22d560></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<span class="text-sm text-slate-500 italic" data-v-ab22d560>Zárva</span>`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div></div></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`<div class="sticky bottom-0 bg-slate-900/90 backdrop-blur-sm border-t border-slate-700 -mx-6 px-6 py-4 mt-8" data-v-ab22d560><div class="flex items-center justify-between max-w-4xl" data-v-ab22d560><div class="text-sm text-slate-400" data-v-ab22d560>`);
|
||||||
|
if (hasChanges.value) {
|
||||||
|
_push(`<span class="text-amber-400" data-v-ab22d560>● Módosítások el nem mentve</span>`);
|
||||||
|
} else {
|
||||||
|
_push(`<span class="text-slate-500" data-v-ab22d560>Nincs változás</span>`);
|
||||||
|
}
|
||||||
|
_push(`</div><div class="flex gap-3" data-v-ab22d560><button class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-ab22d560> Mégse </button><button${ssrIncludeBooleanAttr(saveLoading.value || !hasChanges.value) ? " disabled" : ""} class="px-6 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-ab22d560>`);
|
||||||
|
if (saveLoading.value) {
|
||||||
|
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-ab22d560></path></svg>`);
|
||||||
|
} else {
|
||||||
|
_push(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-ab22d560><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-ab22d560></path></svg>`);
|
||||||
|
}
|
||||||
|
_push(` Mentés </button></div></div></div><!--]-->`);
|
||||||
|
}
|
||||||
|
if (toast.value) {
|
||||||
|
_push(`<div class="${ssrRenderClass([toast.value.type === "success" ? "bg-emerald-600 text-white" : "bg-rose-600 text-white", "fixed top-4 right-4 z-50 px-4 py-3 rounded-lg shadow-xl text-sm font-medium transition-all duration-300"])}" data-v-ab22d560>${ssrInterpolate(toast.value.message)}</div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const _sfc_setup = _sfc_main.setup;
|
||||||
|
_sfc_main.setup = (props, ctx) => {
|
||||||
|
const ssrContext = useSSRContext();
|
||||||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/providers/[id]/edit.vue");
|
||||||
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
||||||
|
};
|
||||||
|
const edit = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ab22d560"]]);
|
||||||
|
export {
|
||||||
|
edit as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=edit-ZNmjSMhu.js.map
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-ZNmjSMhu.js.map.json
vendored
Normal file
File diff suppressed because one or more lines are too long
5
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js
vendored
Normal file
5
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const SmartLocationInput_vue_vue_type_style_index_0_scoped_b43e13ca_lang = ".overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-b43e13ca]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}";
|
||||||
|
export {
|
||||||
|
SmartLocationInput_vue_vue_type_style_index_0_scoped_b43e13ca_lang as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=edit-styles-1.mjs-J0c-7dzy.js.map
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"edit-styles-1.mjs-J0c-7dzy.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-1.mjs-J0c-7dzy.js.map.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"file":"edit-styles-1.mjs-J0c-7dzy.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
const edit_vue_vue_type_style_index_0_scoped_4a0954df_lang = ".overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}.overflow-y-auto[data-v-4a0954df]::-webkit-scrollbar-thumb:hover{background-color:#64748bb3}";
|
|
||||||
export {
|
|
||||||
edit_vue_vue_type_style_index_0_scoped_4a0954df_lang as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=edit-styles-1.mjs-YVNjgFq6.js.map
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"edit-styles-1.mjs-YVNjgFq6.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"file":"edit-styles-1.mjs-YVNjgFq6.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
||||||
5
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js
vendored
Normal file
5
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const edit_vue_vue_type_style_index_0_scoped_ab22d560_lang = ".overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar{width:6px}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-track{background:transparent}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-thumb{background-color:#64748b80;border-radius:3px}.overflow-y-auto[data-v-ab22d560]::-webkit-scrollbar-thumb:hover{background-color:#64748bb3}";
|
||||||
|
export {
|
||||||
|
edit_vue_vue_type_style_index_0_scoped_ab22d560_lang as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=edit-styles-2.mjs-BLAWo_jb.js.map
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"edit-styles-2.mjs-BLAWo_jb.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles-2.mjs-BLAWo_jb.js.map.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"file":"edit-styles-2.mjs-BLAWo_jb.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
||||||
6
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles.BU1rQqCP.mjs
vendored
Normal file
6
frontend_admin/.nuxt/dist/server/_nuxt/edit-styles.BU1rQqCP.mjs
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import style_0 from "./edit-styles-1.mjs-J0c-7dzy.js";
|
||||||
|
import style_1 from "./edit-styles-2.mjs-BLAWo_jb.js";
|
||||||
|
export default [
|
||||||
|
style_0,
|
||||||
|
style_1
|
||||||
|
]
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
import style_0 from "./edit-styles-1.mjs-YVNjgFq6.js";
|
|
||||||
export default [
|
|
||||||
style_0
|
|
||||||
]
|
|
||||||
5
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js
vendored
Normal file
5
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"entry-styles-1.mjs-BSzsbuA-.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-1.mjs-BSzsbuA-.js.map.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"file":"entry-styles-1.mjs-BSzsbuA-.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"entry-styles-1.mjs-BTLckatc.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"file":"entry-styles-1.mjs-BTLckatc.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
||||||
5
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js
vendored
Normal file
5
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"entry-styles-2.mjs-6hMhRapZ.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles-2.mjs-6hMhRapZ.js.map.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"file":"entry-styles-2.mjs-6hMhRapZ.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"entry-styles-2.mjs-CjBdWjhK.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"file":"entry-styles-2.mjs-CjBdWjhK.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
||||||
8
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles.BrYI8OxV.mjs
vendored
Normal file
8
frontend_admin/.nuxt/dist/server/_nuxt/entry-styles.BrYI8OxV.mjs
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import style_0 from "./entry-styles-1.mjs-BSzsbuA-.js";
|
||||||
|
import style_1 from "./entry-styles-2.mjs-6hMhRapZ.js";
|
||||||
|
import style_2 from "./entry-styles-3.mjs-C1rWf53M.js";
|
||||||
|
export default [
|
||||||
|
style_0,
|
||||||
|
style_1,
|
||||||
|
style_2
|
||||||
|
]
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import style_0 from "./entry-styles-1.mjs-BTLckatc.js";
|
|
||||||
import style_1 from "./entry-styles-2.mjs-CjBdWjhK.js";
|
|
||||||
import style_2 from "./entry-styles-3.mjs-C1rWf53M.js";
|
|
||||||
export default [
|
|
||||||
style_0,
|
|
||||||
style_1,
|
|
||||||
style_2
|
|
||||||
]
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { _ as __nuxt_component_0 } from "./nuxt-link-1NBbHb-h.js";
|
import { _ as __nuxt_component_0 } from "./nuxt-link-1NBbHb-h.js";
|
||||||
import { defineComponent, ref, computed, watch, createVNode, resolveDynamicComponent, withCtx, openBlock, createBlock, createTextVNode, useSSRContext } from "vue";
|
import { defineComponent, useSSRContext, ref, computed, watch, createVNode, resolveDynamicComponent, withCtx, openBlock, createBlock, createTextVNode } from "vue";
|
||||||
import { ssrRenderAttrs, ssrInterpolate, ssrRenderClass, ssrRenderList, ssrRenderVNode, ssrRenderStyle, ssrRenderAttr, ssrIncludeBooleanAttr, ssrRenderComponent, ssrLooseContain, ssrLooseEqual } from "vue/server-renderer";
|
import { ssrRenderAttrs, ssrRenderList, ssrInterpolate, ssrRenderComponent, ssrRenderClass, ssrRenderVNode, ssrRenderStyle, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual } from "vue/server-renderer";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
import { d as useCookie } from "../server.mjs";
|
import { d as useCookie } from "../server.mjs";
|
||||||
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
|
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
|
||||||
@@ -18,6 +18,81 @@ import "/app/node_modules/destr/dist/index.mjs";
|
|||||||
import "/app/node_modules/ohash/dist/index.mjs";
|
import "/app/node_modules/ohash/dist/index.mjs";
|
||||||
import "/app/node_modules/@unhead/vue/dist/index.mjs";
|
import "/app/node_modules/@unhead/vue/dist/index.mjs";
|
||||||
import "@vue/devtools-api";
|
import "@vue/devtools-api";
|
||||||
|
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "RawDataViewer",
|
||||||
|
__ssrInlineRender: true,
|
||||||
|
props: {
|
||||||
|
data: {}
|
||||||
|
},
|
||||||
|
setup(__props) {
|
||||||
|
function isEmpty(obj) {
|
||||||
|
if (!obj || typeof obj !== "object") return true;
|
||||||
|
return Object.keys(obj).length === 0;
|
||||||
|
}
|
||||||
|
function objectKeys(obj) {
|
||||||
|
if (!obj || typeof obj !== "object") return "{ }";
|
||||||
|
const keys = Object.keys(obj);
|
||||||
|
if (keys.length === 0) return "{ üres }";
|
||||||
|
return `{ ${keys.length} kulcs }`;
|
||||||
|
}
|
||||||
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
|
const _component_RawDataViewer = _sfc_main$1;
|
||||||
|
_push(`<div${ssrRenderAttrs(_attrs)}>`);
|
||||||
|
if (!__props.data || isEmpty(__props.data)) {
|
||||||
|
_push(`<div class="text-center py-8"><svg class="w-10 h-10 mx-auto mb-3 text-slate-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4"></path></svg><p class="text-sm text-slate-500">Nincs nyers adat</p></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<div class="space-y-1 font-mono text-xs"><!--[-->`);
|
||||||
|
ssrRenderList(__props.data, (value, key) => {
|
||||||
|
_push(`<div class="border-b border-slate-700/50 last:border-0"><div class="flex items-start gap-3 py-2"><span class="text-indigo-400 font-semibold whitespace-nowrap min-w-[140px] flex-shrink-0">${ssrInterpolate(key)}</span><div class="flex-1 min-w-0">`);
|
||||||
|
if (value === null || value === void 0) {
|
||||||
|
_push(`<span class="text-slate-500 italic">null</span>`);
|
||||||
|
} else if (typeof value === "string") {
|
||||||
|
_push(`<span class="text-emerald-300 break-words"> "${ssrInterpolate(value)}" </span>`);
|
||||||
|
} else if (typeof value === "number" || typeof value === "boolean") {
|
||||||
|
_push(`<span class="text-amber-300">${ssrInterpolate(value)}</span>`);
|
||||||
|
} else if (Array.isArray(value)) {
|
||||||
|
_push(`<div>`);
|
||||||
|
if (value.length === 0) {
|
||||||
|
_push(`<span class="text-slate-500 italic">[]</span>`);
|
||||||
|
} else {
|
||||||
|
_push(`<details class="group"><summary class="cursor-pointer text-slate-400 hover:text-slate-300 list-none flex items-center gap-1.5"><svg class="w-3 h-3 transition-transform group-open:rotate-90" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg><span class="text-slate-400">Array [${ssrInterpolate(value.length)}]</span></summary><div class="ml-4 mt-1 space-y-1 border-l border-slate-700 pl-3"><!--[-->`);
|
||||||
|
ssrRenderList(value, (item, idx) => {
|
||||||
|
_push(`<div class="py-1"><span class="text-slate-500 mr-2">[${ssrInterpolate(idx)}]</span>`);
|
||||||
|
if (typeof item === "object" && item !== null) {
|
||||||
|
_push(`<span class="text-slate-400">`);
|
||||||
|
_push(ssrRenderComponent(_component_RawDataViewer, { data: item }, null, _parent));
|
||||||
|
_push(`</span>`);
|
||||||
|
} else if (typeof item === "string") {
|
||||||
|
_push(`<span class="text-emerald-300">"${ssrInterpolate(item)}"</span>`);
|
||||||
|
} else {
|
||||||
|
_push(`<span class="text-amber-300">${ssrInterpolate(item)}</span>`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div></details>`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
} else if (typeof value === "object") {
|
||||||
|
_push(`<div><details class="group"><summary class="cursor-pointer text-slate-400 hover:text-slate-300 list-none flex items-center gap-1.5"><svg class="w-3 h-3 transition-transform group-open:rotate-90" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg><span class="text-slate-400">Object ${ssrInterpolate(objectKeys(value))}</span></summary><div class="ml-4 mt-1 border-l border-slate-700 pl-3">`);
|
||||||
|
_push(ssrRenderComponent(_component_RawDataViewer, { data: value }, null, _parent));
|
||||||
|
_push(`</div></details></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<span class="text-slate-400">${ssrInterpolate(String(value))}</span>`);
|
||||||
|
}
|
||||||
|
_push(`</div></div></div>`);
|
||||||
|
});
|
||||||
|
_push(`<!--]--></div>`);
|
||||||
|
}
|
||||||
|
_push(`</div>`);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const _sfc_setup$1 = _sfc_main$1.setup;
|
||||||
|
_sfc_main$1.setup = (props, ctx) => {
|
||||||
|
const ssrContext = useSSRContext();
|
||||||
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/RawDataViewer.vue");
|
||||||
|
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
||||||
|
};
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
__name: "index",
|
__name: "index",
|
||||||
__ssrInlineRender: true,
|
__ssrInlineRender: true,
|
||||||
@@ -48,6 +123,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
{ key: "data", label: "Adatok", icon: "svg" },
|
{ key: "data", label: "Adatok", icon: "svg" },
|
||||||
{ key: "status", label: "Státusz", icon: "svg" },
|
{ key: "status", label: "Státusz", icon: "svg" },
|
||||||
{ key: "validations", label: "Validációk", icon: "svg" },
|
{ key: "validations", label: "Validációk", icon: "svg" },
|
||||||
|
{ key: "crawler", label: "Crawler / Nyers Adatok", icon: "svg" },
|
||||||
{ key: "history", label: "Előzmények", icon: "svg" }
|
{ key: "history", label: "Előzmények", icon: "svg" }
|
||||||
];
|
];
|
||||||
const statusBannerClass = computed(() => {
|
const statusBannerClass = computed(() => {
|
||||||
@@ -103,6 +179,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
if (!spec || typeof spec !== "object") return false;
|
if (!spec || typeof spec !== "object") return false;
|
||||||
return Array.isArray(spec.brands) && spec.brands.length > 0 || Array.isArray(spec.propulsion) && spec.propulsion.length > 0;
|
return Array.isArray(spec.brands) && spec.brands.length > 0 || Array.isArray(spec.propulsion) && spec.propulsion.length > 0;
|
||||||
});
|
});
|
||||||
|
const trustScoreBadgeClass = computed(() => {
|
||||||
|
const score = provider.value?.trust_score;
|
||||||
|
if (score === null || score === void 0) return "bg-slate-700 text-slate-400";
|
||||||
|
if (score > 80) return "bg-emerald-500/20 text-emerald-400 border border-emerald-500/30";
|
||||||
|
if (score > 50) return "bg-amber-500/20 text-amber-400 border border-amber-500/30";
|
||||||
|
return "bg-rose-500/20 text-rose-400 border border-rose-500/30";
|
||||||
|
});
|
||||||
const DAYS = [
|
const DAYS = [
|
||||||
{ key: "monday", label: "Hétfő" },
|
{ key: "monday", label: "Hétfő" },
|
||||||
{ key: "tuesday", label: "Kedd" },
|
{ key: "tuesday", label: "Kedd" },
|
||||||
@@ -280,72 +363,73 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
watch(activeTab, onTabChange);
|
watch(activeTab, onTabChange);
|
||||||
return (_ctx, _push, _parent, _attrs) => {
|
return (_ctx, _push, _parent, _attrs) => {
|
||||||
const _component_NuxtLink = __nuxt_component_0;
|
const _component_NuxtLink = __nuxt_component_0;
|
||||||
_push(`<div${ssrRenderAttrs(_attrs)} data-v-aa1d3c94><div class="mb-8" data-v-aa1d3c94><button class="inline-flex items-center gap-1.5 text-sm text-slate-400 hover:text-white transition mb-4" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" data-v-aa1d3c94></path></svg> Vissza a szolgáltatókhoz </button><h1 class="text-2xl font-bold text-white" data-v-aa1d3c94>Szolgáltató részletek</h1><p class="text-slate-400 mt-1" data-v-aa1d3c94>Szolgáltató #${ssrInterpolate(_ctx.$route.params.id)}</p></div>`);
|
const _component_RawDataViewer = _sfc_main$1;
|
||||||
|
_push(`<div${ssrRenderAttrs(_attrs)} data-v-5941cb1d><div class="mb-8" data-v-5941cb1d><button class="inline-flex items-center gap-1.5 text-sm text-slate-400 hover:text-white transition mb-4" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" data-v-5941cb1d></path></svg> Vissza a szolgáltatókhoz </button><h1 class="text-2xl font-bold text-white" data-v-5941cb1d>Szolgáltató részletek</h1><p class="text-slate-400 mt-1" data-v-5941cb1d>Szolgáltató #${ssrInterpolate(_ctx.$route.params.id)}</p></div>`);
|
||||||
if (loading.value) {
|
if (loading.value) {
|
||||||
_push(`<div class="flex items-center justify-center py-20" data-v-aa1d3c94><div class="text-slate-400 flex items-center gap-3" data-v-aa1d3c94><svg class="w-5 h-5 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg><span data-v-aa1d3c94>Szolgáltató betöltése...</span></div></div>`);
|
_push(`<div class="flex items-center justify-center py-20" data-v-5941cb1d><div class="text-slate-400 flex items-center gap-3" data-v-5941cb1d><svg class="w-5 h-5 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg><span data-v-5941cb1d>Szolgáltató betöltése...</span></div></div>`);
|
||||||
} else if (error.value) {
|
} else if (error.value) {
|
||||||
_push(`<div class="bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8" data-v-aa1d3c94><p class="text-rose-400" data-v-aa1d3c94>Hiba történt a szolgáltató betöltése közben.</p><button class="mt-3 text-sm text-rose-300 hover:text-rose-200 underline" data-v-aa1d3c94>Újrapróbálkozás</button></div>`);
|
_push(`<div class="bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8" data-v-5941cb1d><p class="text-rose-400" data-v-5941cb1d>Hiba történt a szolgáltató betöltése közben.</p><button class="mt-3 text-sm text-rose-300 hover:text-rose-200 underline" data-v-5941cb1d>Újrapróbálkozás</button></div>`);
|
||||||
} else if (!provider.value) {
|
} else if (!provider.value) {
|
||||||
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><p class="text-slate-400 text-center py-12" data-v-aa1d3c94>A szolgáltató nem található.</p></div>`);
|
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><p class="text-slate-400 text-center py-12" data-v-5941cb1d>A szolgáltató nem található.</p></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!--[--><div class="${ssrRenderClass([statusBannerClass.value, "rounded-xl border p-4 mb-6 flex items-center gap-3"])}" data-v-aa1d3c94><span class="${ssrRenderClass([statusIconClass.value, "flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center"])}" data-v-aa1d3c94>`);
|
_push(`<!--[--><div class="${ssrRenderClass([statusBannerClass.value, "rounded-xl border p-4 mb-6 flex items-center gap-3"])}" data-v-5941cb1d><span class="${ssrRenderClass([statusIconClass.value, "flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center"])}" data-v-5941cb1d>`);
|
||||||
if (provider.value.status === "approved") {
|
if (provider.value.status === "approved") {
|
||||||
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-5941cb1d></path></svg>`);
|
||||||
} else if (provider.value.status === "pending") {
|
} else if (provider.value.status === "pending") {
|
||||||
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" data-v-5941cb1d></path></svg>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-5941cb1d></path></svg>`);
|
||||||
}
|
}
|
||||||
_push(`</span><div data-v-aa1d3c94><p class="${ssrRenderClass([statusTextClass.value, "text-sm font-medium"])}" data-v-aa1d3c94>${ssrInterpolate(statusLabel(provider.value.status))}</p><p class="${ssrRenderClass([statusSubtextClass.value, "text-xs mt-0.5"])}" data-v-aa1d3c94>${ssrInterpolate(statusDescription(provider.value.status))}</p></div></div><div class="border-b border-slate-700 mb-6" data-v-aa1d3c94><nav class="flex gap-6 -mb-px" data-v-aa1d3c94><!--[-->`);
|
_push(`</span><div data-v-5941cb1d><p class="${ssrRenderClass([statusTextClass.value, "text-sm font-medium"])}" data-v-5941cb1d>${ssrInterpolate(statusLabel(provider.value.status))}</p><p class="${ssrRenderClass([statusSubtextClass.value, "text-xs mt-0.5"])}" data-v-5941cb1d>${ssrInterpolate(statusDescription(provider.value.status))}</p></div></div><div class="border-b border-slate-700 mb-6" data-v-5941cb1d><nav class="flex gap-6 -mb-px" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(tabs, (tab) => {
|
ssrRenderList(tabs, (tab) => {
|
||||||
_push(`<button class="${ssrRenderClass([activeTab.value === tab.key ? "text-indigo-400 border-indigo-400" : "text-slate-400 border-transparent hover:text-slate-300", "pb-3 text-sm font-medium border-b-2 transition flex items-center gap-2"])}" data-v-aa1d3c94>`);
|
_push(`<button class="${ssrRenderClass([activeTab.value === tab.key ? "text-indigo-400 border-indigo-400" : "text-slate-400 border-transparent hover:text-slate-300", "pb-3 text-sm font-medium border-b-2 transition flex items-center gap-2"])}" data-v-5941cb1d>`);
|
||||||
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(tab.icon), { class: "w-4 h-4" }, null), _parent);
|
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(tab.icon), { class: "w-4 h-4" }, null), _parent);
|
||||||
_push(` ${ssrInterpolate(tab.label)}</button>`);
|
_push(` ${ssrInterpolate(tab.label)}</button>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></nav></div>`);
|
_push(`<!--]--></nav></div>`);
|
||||||
if (activeTab.value === "data") {
|
if (activeTab.value === "data") {
|
||||||
_push(`<div class="grid grid-cols-1 lg:grid-cols-3 gap-6" data-v-aa1d3c94><div class="lg:col-span-2 space-y-6" data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Alapadatok</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-aa1d3c94><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Név</dt><dd class="text-sm text-white mt-1 font-medium" data-v-aa1d3c94>${ssrInterpolate(provider.value.name)}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Kategória</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.category || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Forrás</dt><dd class="mt-1" data-v-aa1d3c94><code class="text-sm font-mono text-amber-300 bg-amber-500/10 px-2 py-0.5 rounded" data-v-aa1d3c94>${ssrInterpolate(provider.value.source)}</code></dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Validációs pontszám</dt><dd class="mt-1" data-v-aa1d3c94><div class="flex items-center gap-2" data-v-aa1d3c94><div class="w-24 h-2 bg-slate-700 rounded-full overflow-hidden" data-v-aa1d3c94><div class="${ssrRenderClass([provider.value.validation_score >= 50 ? "bg-emerald-500" : provider.value.validation_score >= 20 ? "bg-amber-500" : "bg-slate-500", "h-full rounded-full transition-all"])}" style="${ssrRenderStyle({ width: Math.min(provider.value.validation_score, 100) + "%" })}" data-v-aa1d3c94></div></div><span class="text-sm text-white font-medium" data-v-aa1d3c94>${ssrInterpolate(provider.value.validation_score)}</span></div></dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Létrehozva</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(formatDate(provider.value.created_at))}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Beküldő user ID</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.added_by_user_id || "—")}</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Cím adatok</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-aa1d3c94><div class="md:col-span-2" data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Teljes cím</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.address || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Város</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.city || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Irányítószám</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.address_zip || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Utca</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.address_street_name || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Házszám</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.address_house_number || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Plus Code</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.plus_code || "—")}</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Elérhetőség</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-aa1d3c94><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Telefon</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.contact_phone || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Email</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>${ssrInterpolate(provider.value.contact_email || "—")}</dd></div><div data-v-aa1d3c94><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-aa1d3c94>Weboldal</dt><dd class="text-sm text-white mt-1" data-v-aa1d3c94>`);
|
_push(`<div class="grid grid-cols-1 lg:grid-cols-3 gap-6" data-v-5941cb1d><div class="lg:col-span-2 space-y-6" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Alapadatok</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-5941cb1d><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Név</dt><dd class="text-sm text-white mt-1 font-medium" data-v-5941cb1d>${ssrInterpolate(provider.value.name)}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Kategória</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.category || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Forrás</dt><dd class="mt-1" data-v-5941cb1d><code class="text-sm font-mono text-amber-300 bg-amber-500/10 px-2 py-0.5 rounded" data-v-5941cb1d>${ssrInterpolate(provider.value.source)}</code></dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Validációs pontszám</dt><dd class="mt-1" data-v-5941cb1d><div class="flex items-center gap-2" data-v-5941cb1d><div class="w-24 h-2 bg-slate-700 rounded-full overflow-hidden" data-v-5941cb1d><div class="${ssrRenderClass([provider.value.validation_score >= 50 ? "bg-emerald-500" : provider.value.validation_score >= 20 ? "bg-amber-500" : "bg-slate-500", "h-full rounded-full transition-all"])}" style="${ssrRenderStyle({ width: Math.min(provider.value.validation_score, 100) + "%" })}" data-v-5941cb1d></div></div><span class="text-sm text-white font-medium" data-v-5941cb1d>${ssrInterpolate(provider.value.validation_score)}</span></div></dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Létrehozva</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(formatDate(provider.value.created_at))}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Beküldő user ID</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.added_by_user_id || "—")}</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Cím adatok</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-5941cb1d><div class="md:col-span-2" data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Teljes cím</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.address || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Város</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.city || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Irányítószám</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.address_zip || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Utca</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.address_street_name || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Házszám</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.address_house_number || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Plus Code</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.plus_code || "—")}</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Elérhetőség</h2><dl class="grid grid-cols-1 md:grid-cols-2 gap-4" data-v-5941cb1d><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Telefon</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.contact_phone || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Email</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>${ssrInterpolate(provider.value.contact_email || "—")}</dd></div><div data-v-5941cb1d><dt class="text-xs text-slate-500 uppercase tracking-wider" data-v-5941cb1d>Weboldal</dt><dd class="text-sm text-white mt-1" data-v-5941cb1d>`);
|
||||||
if (provider.value.website) {
|
if (provider.value.website) {
|
||||||
_push(`<a${ssrRenderAttr("href", provider.value.website)} target="_blank" class="text-indigo-400 hover:text-indigo-300 underline" data-v-aa1d3c94>${ssrInterpolate(provider.value.website)}</a>`);
|
_push(`<a${ssrRenderAttr("href", provider.value.website)} target="_blank" class="text-indigo-400 hover:text-indigo-300 underline" data-v-5941cb1d>${ssrInterpolate(provider.value.website)}</a>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<span data-v-aa1d3c94>—</span>`);
|
_push(`<span data-v-5941cb1d>—</span>`);
|
||||||
}
|
}
|
||||||
_push(`</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Szolgáltatások</h2>`);
|
_push(`</dd></div></dl></div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Szolgáltatások</h2>`);
|
||||||
if (provider.value.category_ids && provider.value.category_ids.length > 0) {
|
if (provider.value.category_ids && provider.value.category_ids.length > 0) {
|
||||||
_push(`<div class="flex flex-wrap gap-2" data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="flex flex-wrap gap-2" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(provider.value.category_ids, (catId) => {
|
ssrRenderList(provider.value.category_ids, (catId) => {
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-indigo-500/10 text-indigo-300 rounded-full text-xs font-medium" data-v-aa1d3c94> #${ssrInterpolate(catId)}</span>`);
|
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-indigo-500/10 text-indigo-300 rounded-full text-xs font-medium" data-v-5941cb1d> #${ssrInterpolate(catId)}</span>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div>`);
|
_push(`<!--]--></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<p class="text-sm text-slate-500 italic" data-v-aa1d3c94>Nincsenek kategóriák beállítva</p>`);
|
_push(`<p class="text-sm text-slate-500 italic" data-v-5941cb1d>Nincsenek kategóriák beállítva</p>`);
|
||||||
}
|
}
|
||||||
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Járműosztályok</h2>`);
|
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Járműosztályok</h2>`);
|
||||||
if (provider.value.supported_vehicle_classes && provider.value.supported_vehicle_classes.length > 0) {
|
if (provider.value.supported_vehicle_classes && provider.value.supported_vehicle_classes.length > 0) {
|
||||||
_push(`<div class="flex flex-wrap gap-2" data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="flex flex-wrap gap-2" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(provider.value.supported_vehicle_classes, (vc) => {
|
ssrRenderList(provider.value.supported_vehicle_classes, (vc) => {
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-emerald-500/10 text-emerald-300 rounded-full text-xs font-medium" data-v-aa1d3c94>${ssrInterpolate(vehicleClassLabel(vc))}</span>`);
|
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-emerald-500/10 text-emerald-300 rounded-full text-xs font-medium" data-v-5941cb1d>${ssrInterpolate(vehicleClassLabel(vc))}</span>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div>`);
|
_push(`<!--]--></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<p class="text-sm text-slate-500 italic" data-v-aa1d3c94>Nincsenek járműosztályok beállítva</p>`);
|
_push(`<p class="text-sm text-slate-500 italic" data-v-5941cb1d>Nincsenek járműosztályok beállítva</p>`);
|
||||||
}
|
}
|
||||||
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Specializációk</h2>`);
|
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Specializációk</h2>`);
|
||||||
if (hasSpecializations.value) {
|
if (hasSpecializations.value) {
|
||||||
_push(`<div class="space-y-3" data-v-aa1d3c94>`);
|
_push(`<div class="space-y-3" data-v-5941cb1d>`);
|
||||||
if (provider.value.specializations?.brands?.length) {
|
if (provider.value.specializations?.brands?.length) {
|
||||||
_push(`<div data-v-aa1d3c94><h3 class="text-xs text-slate-500 uppercase tracking-wider mb-2" data-v-aa1d3c94>Márkák</h3><div class="flex flex-wrap gap-2" data-v-aa1d3c94><!--[-->`);
|
_push(`<div data-v-5941cb1d><h3 class="text-xs text-slate-500 uppercase tracking-wider mb-2" data-v-5941cb1d>Márkák</h3><div class="flex flex-wrap gap-2" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(provider.value.specializations.brands, (brand) => {
|
ssrRenderList(provider.value.specializations.brands, (brand) => {
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-amber-500/10 text-amber-300 rounded-full text-xs font-medium" data-v-aa1d3c94>${ssrInterpolate(brand)}</span>`);
|
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-amber-500/10 text-amber-300 rounded-full text-xs font-medium" data-v-5941cb1d>${ssrInterpolate(brand)}</span>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div></div>`);
|
_push(`<!--]--></div></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (provider.value.specializations?.propulsion?.length) {
|
if (provider.value.specializations?.propulsion?.length) {
|
||||||
_push(`<div data-v-aa1d3c94><h3 class="text-xs text-slate-500 uppercase tracking-wider mb-2" data-v-aa1d3c94>Hajtáslánc</h3><div class="flex flex-wrap gap-2" data-v-aa1d3c94><!--[-->`);
|
_push(`<div data-v-5941cb1d><h3 class="text-xs text-slate-500 uppercase tracking-wider mb-2" data-v-5941cb1d>Hajtáslánc</h3><div class="flex flex-wrap gap-2" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(provider.value.specializations.propulsion, (prop) => {
|
ssrRenderList(provider.value.specializations.propulsion, (prop) => {
|
||||||
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-cyan-500/10 text-cyan-300 rounded-full text-xs font-medium" data-v-aa1d3c94>${ssrInterpolate(prop)}</span>`);
|
_push(`<span class="inline-flex items-center gap-1 px-3 py-1.5 bg-cyan-500/10 text-cyan-300 rounded-full text-xs font-medium" data-v-5941cb1d>${ssrInterpolate(prop)}</span>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div></div>`);
|
_push(`<!--]--></div></div>`);
|
||||||
} else {
|
} else {
|
||||||
@@ -353,42 +437,42 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}
|
}
|
||||||
_push(`</div>`);
|
_push(`</div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<p class="text-sm text-slate-500 italic" data-v-aa1d3c94>Nincsenek specializációk beállítva</p>`);
|
_push(`<p class="text-sm text-slate-500 italic" data-v-5941cb1d>Nincsenek specializációk beállítva</p>`);
|
||||||
}
|
}
|
||||||
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Nyitvatartás</h2>`);
|
_push(`</div><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Nyitvatartás</h2>`);
|
||||||
if (hasOpeningHours.value) {
|
if (hasOpeningHours.value) {
|
||||||
_push(`<div class="overflow-hidden" data-v-aa1d3c94><table class="w-full text-sm" data-v-aa1d3c94><thead data-v-aa1d3c94><tr class="border-b border-slate-700" data-v-aa1d3c94><th class="text-left text-xs text-slate-500 uppercase tracking-wider pb-2 pr-4" data-v-aa1d3c94>Nap</th><th class="text-left text-xs text-slate-500 uppercase tracking-wider pb-2" data-v-aa1d3c94>Nyitva</th></tr></thead><tbody data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="overflow-hidden" data-v-5941cb1d><table class="w-full text-sm" data-v-5941cb1d><thead data-v-5941cb1d><tr class="border-b border-slate-700" data-v-5941cb1d><th class="text-left text-xs text-slate-500 uppercase tracking-wider pb-2 pr-4" data-v-5941cb1d>Nap</th><th class="text-left text-xs text-slate-500 uppercase tracking-wider pb-2" data-v-5941cb1d>Nyitva</th></tr></thead><tbody data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(DAYS, (day) => {
|
ssrRenderList(DAYS, (day) => {
|
||||||
_push(`<tr class="border-b border-slate-700/50 last:border-0" data-v-aa1d3c94><td class="py-2 pr-4 text-white font-medium" data-v-aa1d3c94>${ssrInterpolate(day.label)}</td><td class="py-2" data-v-aa1d3c94>`);
|
_push(`<tr class="border-b border-slate-700/50 last:border-0" data-v-5941cb1d><td class="py-2 pr-4 text-white font-medium" data-v-5941cb1d>${ssrInterpolate(day.label)}</td><td class="py-2" data-v-5941cb1d>`);
|
||||||
if (getDayHours(day.key)) {
|
if (getDayHours(day.key)) {
|
||||||
_push(`<!--[--><span class="text-white" data-v-aa1d3c94>${ssrInterpolate(getDayHours(day.key)?.open)}</span><span class="text-slate-500 mx-1" data-v-aa1d3c94>–</span><span class="text-white" data-v-aa1d3c94>${ssrInterpolate(getDayHours(day.key)?.close)}</span><!--]-->`);
|
_push(`<!--[--><span class="text-white" data-v-5941cb1d>${ssrInterpolate(getDayHours(day.key)?.open)}</span><span class="text-slate-500 mx-1" data-v-5941cb1d>–</span><span class="text-white" data-v-5941cb1d>${ssrInterpolate(getDayHours(day.key)?.close)}</span><!--]-->`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<span class="text-slate-500 italic" data-v-aa1d3c94>Zárva</span>`);
|
_push(`<span class="text-slate-500 italic" data-v-5941cb1d>Zárva</span>`);
|
||||||
}
|
}
|
||||||
_push(`</td></tr>`);
|
_push(`</td></tr>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></tbody></table></div>`);
|
_push(`<!--]--></tbody></table></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<div data-v-aa1d3c94><p class="text-sm text-slate-500 italic" data-v-aa1d3c94>Nincs beállítva nyitvatartás</p></div>`);
|
_push(`<div data-v-5941cb1d><p class="text-sm text-slate-500 italic" data-v-5941cb1d>Nincs beállítva nyitvatartás</p></div>`);
|
||||||
}
|
}
|
||||||
_push(`</div></div><div class="space-y-4" data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Moderációs műveletek</h2>`);
|
_push(`</div></div><div class="space-y-4" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Moderációs műveletek</h2>`);
|
||||||
if (provider.value.status === "pending") {
|
if (provider.value.status === "pending") {
|
||||||
_push(`<div class="space-y-3" data-v-aa1d3c94><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94>`);
|
_push(`<div class="space-y-3" data-v-5941cb1d><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d>`);
|
||||||
if (actionLoading.value) {
|
if (actionLoading.value) {
|
||||||
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" data-v-5941cb1d></path></svg>`);
|
||||||
}
|
}
|
||||||
_push(` Jóváhagyás </button><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-aa1d3c94></path></svg> Elutasítás </button></div>`);
|
_push(` Jóváhagyás </button><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-v-5941cb1d></path></svg> Elutasítás </button></div>`);
|
||||||
} else if (provider.value.status === "approved") {
|
} else if (provider.value.status === "approved") {
|
||||||
_push(`<div class="space-y-3" data-v-aa1d3c94>`);
|
_push(`<div class="space-y-3" data-v-5941cb1d>`);
|
||||||
_push(ssrRenderComponent(_component_NuxtLink, {
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
||||||
to: `/providers/${provider.value.id}/edit`,
|
to: `/providers/${provider.value.id}/edit`,
|
||||||
class: "w-full px-4 py-3 bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2"
|
class: "w-full px-4 py-3 bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2"
|
||||||
}, {
|
}, {
|
||||||
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
||||||
if (_push2) {
|
if (_push2) {
|
||||||
_push2(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94${_scopeId}><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" data-v-aa1d3c94${_scopeId}></path></svg> Szerkesztés `);
|
_push2(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d${_scopeId}><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" data-v-5941cb1d${_scopeId}></path></svg> Szerkesztés `);
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
(openBlock(), createBlock("svg", {
|
(openBlock(), createBlock("svg", {
|
||||||
@@ -410,16 +494,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}),
|
}),
|
||||||
_: 1
|
_: 1
|
||||||
}, _parent));
|
}, _parent));
|
||||||
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-purple-600/20 hover:bg-purple-600/40 disabled:opacity-50 text-purple-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 21v-4m0 0V5a2 2 0 012-2h6.5l1 1H21l-3 6 3 6h-8.5l-1-1H5a2 2 0 00-2 2zm9-13.5V9" data-v-aa1d3c94></path></svg> Megjelölés (Flag) </button><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" data-v-aa1d3c94></path></svg> Törlés (Soft Delete) </button></div>`);
|
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-purple-600/20 hover:bg-purple-600/40 disabled:opacity-50 text-purple-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 21v-4m0 0V5a2 2 0 012-2h6.5l1 1H21l-3 6 3 6h-8.5l-1-1H5a2 2 0 00-2 2zm9-13.5V9" data-v-5941cb1d></path></svg> Megjelölés (Flag) </button><button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" data-v-5941cb1d></path></svg> Törlés (Soft Delete) </button></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<div class="space-y-3" data-v-aa1d3c94><p class="text-sm text-slate-400 text-center py-2" data-v-aa1d3c94> A szolgáltató ${ssrInterpolate(provider.value.status === "rejected" ? "elutasításra" : "megjelölésre")} került. </p>`);
|
_push(`<div class="space-y-3" data-v-5941cb1d><p class="text-sm text-slate-400 text-center py-2" data-v-5941cb1d> A szolgáltató ${ssrInterpolate(provider.value.status === "rejected" ? "elutasításra" : "megjelölésre")} került. </p>`);
|
||||||
_push(ssrRenderComponent(_component_NuxtLink, {
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
||||||
to: `/providers/${provider.value.id}/edit`,
|
to: `/providers/${provider.value.id}/edit`,
|
||||||
class: "w-full px-4 py-3 bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2"
|
class: "w-full px-4 py-3 bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2"
|
||||||
}, {
|
}, {
|
||||||
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
||||||
if (_push2) {
|
if (_push2) {
|
||||||
_push2(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94${_scopeId}><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" data-v-aa1d3c94${_scopeId}></path></svg> Szerkesztés `);
|
_push2(`<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d${_scopeId}><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" data-v-5941cb1d${_scopeId}></path></svg> Szerkesztés `);
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
(openBlock(), createBlock("svg", {
|
(openBlock(), createBlock("svg", {
|
||||||
@@ -442,15 +526,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_: 1
|
_: 1
|
||||||
}, _parent));
|
}, _parent));
|
||||||
if (provider.value.status === "rejected") {
|
if (provider.value.status === "rejected") {
|
||||||
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg> Visszaállítás </button>`);
|
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-emerald-600 hover:bg-emerald-500 disabled:bg-emerald-600/50 text-white rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg> Visszaállítás </button>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-aa1d3c94><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" data-v-aa1d3c94></path></svg> Törlés </button></div>`);
|
_push(`<button${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="w-full px-4 py-3 bg-rose-600/20 hover:bg-rose-600/40 disabled:opacity-50 text-rose-400 rounded-lg text-sm font-medium transition flex items-center justify-center gap-2" data-v-5941cb1d><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" data-v-5941cb1d></path></svg> Törlés </button></div>`);
|
||||||
}
|
}
|
||||||
_push(`</div>`);
|
_push(`</div>`);
|
||||||
if (provider.value.evidence_image_path) {
|
if (provider.value.evidence_image_path) {
|
||||||
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Bizonyíték kép</h2><img${ssrRenderAttr("src", provider.value.evidence_image_path)} alt="Evidence" class="w-full rounded-lg border border-slate-600" data-v-aa1d3c94></div>`);
|
_push(`<div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Bizonyíték kép</h2><img${ssrRenderAttr("src", provider.value.evidence_image_path)} alt="Evidence" class="w-full rounded-lg border border-slate-600" data-v-5941cb1d></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
@@ -459,9 +543,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (activeTab.value === "status") {
|
if (activeTab.value === "status") {
|
||||||
_push(`<div class="max-w-2xl" data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Státusz kezelés</h2><p class="text-sm text-slate-400 mb-6" data-v-aa1d3c94>Módosítsd a szolgáltató státuszát és validációs pontszámát.</p><form data-v-aa1d3c94><div class="space-y-4 mb-6" data-v-aa1d3c94><div data-v-aa1d3c94><label class="block text-sm font-medium text-slate-300 mb-1" data-v-aa1d3c94>Státusz</label><select class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-aa1d3c94><option value="pending" data-v-aa1d3c94${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "pending") : ssrLooseEqual(statusForm.value.status, "pending")) ? " selected" : ""}>Függőben</option><option value="approved" data-v-aa1d3c94${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "approved") : ssrLooseEqual(statusForm.value.status, "approved")) ? " selected" : ""}>Jóváhagyott</option><option value="rejected" data-v-aa1d3c94${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "rejected") : ssrLooseEqual(statusForm.value.status, "rejected")) ? " selected" : ""}>Elutasított</option></select></div><div data-v-aa1d3c94><label class="block text-sm font-medium text-slate-300 mb-1" data-v-aa1d3c94> Validációs pontszám (0-100) </label><div class="flex items-center gap-3" data-v-aa1d3c94><input${ssrRenderAttr("value", statusForm.value.validation_score)} type="range" min="0" max="100" class="w-full h-2 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500" data-v-aa1d3c94><span class="text-sm text-white font-medium w-8 text-right" data-v-aa1d3c94>${ssrInterpolate(statusForm.value.validation_score)}</span></div></div><div data-v-aa1d3c94><label class="block text-sm font-medium text-slate-300 mb-1" data-v-aa1d3c94>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg a státuszváltoztatás okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm resize-none" data-v-aa1d3c94>${ssrInterpolate(statusForm.value.reason)}</textarea></div></div><div class="flex justify-end gap-3" data-v-aa1d3c94><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-aa1d3c94>Mégsem</button><button type="submit"${ssrIncludeBooleanAttr(statusLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-aa1d3c94>`);
|
_push(`<div class="max-w-2xl" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Státusz kezelés</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d>Módosítsd a szolgáltató státuszát és validációs pontszámát.</p><form data-v-5941cb1d><div class="space-y-4 mb-6" data-v-5941cb1d><div data-v-5941cb1d><label class="block text-sm font-medium text-slate-300 mb-1" data-v-5941cb1d>Státusz</label><select class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm" data-v-5941cb1d><option value="pending" data-v-5941cb1d${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "pending") : ssrLooseEqual(statusForm.value.status, "pending")) ? " selected" : ""}>Függőben</option><option value="approved" data-v-5941cb1d${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "approved") : ssrLooseEqual(statusForm.value.status, "approved")) ? " selected" : ""}>Jóváhagyott</option><option value="rejected" data-v-5941cb1d${ssrIncludeBooleanAttr(Array.isArray(statusForm.value.status) ? ssrLooseContain(statusForm.value.status, "rejected") : ssrLooseEqual(statusForm.value.status, "rejected")) ? " selected" : ""}>Elutasított</option></select></div><div data-v-5941cb1d><label class="block text-sm font-medium text-slate-300 mb-1" data-v-5941cb1d> Validációs pontszám (0-100) </label><div class="flex items-center gap-3" data-v-5941cb1d><input${ssrRenderAttr("value", statusForm.value.validation_score)} type="range" min="0" max="100" class="w-full h-2 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500" data-v-5941cb1d><span class="text-sm text-white font-medium w-8 text-right" data-v-5941cb1d>${ssrInterpolate(statusForm.value.validation_score)}</span></div></div><div data-v-5941cb1d><label class="block text-sm font-medium text-slate-300 mb-1" data-v-5941cb1d>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg a státuszváltoztatás okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/50 focus:border-indigo-500 text-sm resize-none" data-v-5941cb1d>${ssrInterpolate(statusForm.value.reason)}</textarea></div></div><div class="flex justify-end gap-3" data-v-5941cb1d><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-5941cb1d>Mégsem</button><button type="submit"${ssrIncludeBooleanAttr(statusLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-5941cb1d>`);
|
||||||
if (statusLoading.value) {
|
if (statusLoading.value) {
|
||||||
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
@@ -470,21 +554,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (activeTab.value === "validations") {
|
if (activeTab.value === "validations") {
|
||||||
_push(`<div data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Gamification Validációk</h2><p class="text-sm text-slate-400 mb-6" data-v-aa1d3c94>A szolgáltatóhoz tartozó gamification validációs bejegyzések listája.</p>`);
|
_push(`<div data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Gamification Validációk</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d>A szolgáltatóhoz tartozó gamification validációs bejegyzések listája.</p>`);
|
||||||
if (validationsLoading.value) {
|
if (validationsLoading.value) {
|
||||||
_push(`<div class="flex items-center justify-center py-8" data-v-aa1d3c94><svg class="w-5 h-5 animate-spin text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg></div>`);
|
_push(`<div class="flex items-center justify-center py-8" data-v-5941cb1d><svg class="w-5 h-5 animate-spin text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg></div>`);
|
||||||
} else if (validations.value.length === 0) {
|
} else if (validations.value.length === 0) {
|
||||||
_push(`<div class="text-center py-8" data-v-aa1d3c94><p class="text-slate-500" data-v-aa1d3c94>Nincsenek validációs bejegyzések ehhez a szolgáltatóhoz.</p></div>`);
|
_push(`<div class="text-center py-8" data-v-5941cb1d><p class="text-slate-500" data-v-5941cb1d>Nincsenek validációs bejegyzések ehhez a szolgáltatóhoz.</p></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<div class="space-y-3" data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="space-y-3" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(validations.value, (v) => {
|
ssrRenderList(validations.value, (v) => {
|
||||||
_push(`<div class="bg-slate-700/50 rounded-lg border border-slate-600 p-4" data-v-aa1d3c94><div class="flex items-start justify-between gap-4" data-v-aa1d3c94><div class="flex-1" data-v-aa1d3c94><div class="flex items-center gap-2 mb-1" data-v-aa1d3c94><span class="${ssrRenderClass([validationTypeClass(v.validation_type), "text-xs font-medium px-2 py-0.5 rounded-full"])}" data-v-aa1d3c94>${ssrInterpolate(validationTypeLabel(v.validation_type))}</span><span class="text-xs text-slate-500" data-v-aa1d3c94>súly: ${ssrInterpolate(v.weight)}</span></div><p class="text-sm text-slate-300" data-v-aa1d3c94><span class="text-slate-400" data-v-aa1d3c94>Szavazó:</span> ${ssrInterpolate(v.voter_name || `User #${v.voter_user_id}`)}</p>`);
|
_push(`<div class="bg-slate-700/50 rounded-lg border border-slate-600 p-4" data-v-5941cb1d><div class="flex items-start justify-between gap-4" data-v-5941cb1d><div class="flex-1" data-v-5941cb1d><div class="flex items-center gap-2 mb-1" data-v-5941cb1d><span class="${ssrRenderClass([validationTypeClass(v.validation_type), "text-xs font-medium px-2 py-0.5 rounded-full"])}" data-v-5941cb1d>${ssrInterpolate(validationTypeLabel(v.validation_type))}</span><span class="text-xs text-slate-500" data-v-5941cb1d>súly: ${ssrInterpolate(v.weight)}</span></div><p class="text-sm text-slate-300" data-v-5941cb1d><span class="text-slate-400" data-v-5941cb1d>Szavazó:</span> ${ssrInterpolate(v.voter_name || `User #${v.voter_user_id}`)}</p>`);
|
||||||
if (v.validation_metadata?.reason) {
|
if (v.validation_metadata?.reason) {
|
||||||
_push(`<p class="text-xs text-slate-500 mt-1" data-v-aa1d3c94> Indoklás: ${ssrInterpolate(v.validation_metadata.reason)}</p>`);
|
_push(`<p class="text-xs text-slate-500 mt-1" data-v-5941cb1d> Indoklás: ${ssrInterpolate(v.validation_metadata.reason)}</p>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
_push(`</div><div class="text-xs text-slate-500 whitespace-nowrap" data-v-aa1d3c94>${ssrInterpolate(formatDate(v.created_at))}</div></div></div>`);
|
_push(`</div><div class="text-xs text-slate-500 whitespace-nowrap" data-v-5941cb1d>${ssrInterpolate(formatDate(v.created_at))}</div></div></div>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div>`);
|
_push(`<!--]--></div>`);
|
||||||
}
|
}
|
||||||
@@ -492,32 +576,57 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (activeTab.value === "history") {
|
if (activeTab.value === "crawler") {
|
||||||
_push(`<div data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-4" data-v-aa1d3c94>Állapotváltoztatások előzményei</h2><p class="text-sm text-slate-400 mb-6" data-v-aa1d3c94>Idővonal: ki, mikor és mit változtatott a szolgáltatóval kapcsolatban.</p>`);
|
_push(`<div class="max-w-4xl" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Crawler / Nyers Adatok</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d>A robot által begyűjtött nyers adatok és metaadatok.</p><div class="flex flex-wrap gap-3 mb-6" data-v-5941cb1d><div class="inline-flex items-center gap-1.5 px-3 py-1.5 bg-slate-700 rounded-lg text-xs font-medium" data-v-5941cb1d><span class="text-slate-400" data-v-5941cb1d>Forrás:</span><code class="text-cyan-300 font-mono" data-v-5941cb1d>${ssrInterpolate(provider.value.source || "—")}</code></div><div class="${ssrRenderClass([trustScoreBadgeClass.value, "inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium"])}" data-v-5941cb1d><span class="text-slate-400" data-v-5941cb1d>Trust Score:</span><span class="font-semibold" data-v-5941cb1d>${ssrInterpolate(provider.value.trust_score ?? "—")}</span></div></div>`);
|
||||||
if (historyLoading.value) {
|
if (provider.value.rejection_reason) {
|
||||||
_push(`<div class="flex items-center justify-center py-8" data-v-aa1d3c94><svg class="w-5 h-5 animate-spin text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg></div>`);
|
_push(`<div class="flex items-start gap-3 p-4 mb-6 bg-rose-500/10 border border-rose-500/30 rounded-lg" data-v-5941cb1d><svg class="w-5 h-5 text-rose-400 flex-shrink-0 mt-0.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" data-v-5941cb1d></path></svg><div data-v-5941cb1d><p class="text-sm font-medium text-rose-300" data-v-5941cb1d>Elutasítás indoklása</p><p class="text-sm text-rose-200/70 mt-0.5" data-v-5941cb1d>${ssrInterpolate(provider.value.rejection_reason)}</p></div></div>`);
|
||||||
} else if (history.value.length === 0) {
|
|
||||||
_push(`<div class="text-center py-8" data-v-aa1d3c94><p class="text-slate-500" data-v-aa1d3c94>Nincsenek előzmények ehhez a szolgáltatóhoz.</p></div>`);
|
|
||||||
} else {
|
} else {
|
||||||
_push(`<div class="relative" data-v-aa1d3c94><div class="absolute left-4 top-0 bottom-0 w-0.5 bg-slate-700" data-v-aa1d3c94></div><!--[-->`);
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`<div class="mb-6" data-v-5941cb1d><h3 class="text-sm font-medium text-slate-300 mb-3" data-v-5941cb1d>Nyers adatok (raw_data)</h3><div class="bg-slate-900/50 rounded-lg border border-slate-700 p-4 overflow-x-auto" data-v-5941cb1d>`);
|
||||||
|
_push(ssrRenderComponent(_component_RawDataViewer, {
|
||||||
|
data: provider.value.raw_data
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`</div></div>`);
|
||||||
|
if (provider.value.audit_trail && Object.keys(provider.value.audit_trail).length > 0) {
|
||||||
|
_push(`<div data-v-5941cb1d><h3 class="text-sm font-medium text-slate-300 mb-3" data-v-5941cb1d>Audit Trail</h3><div class="bg-slate-900/50 rounded-lg border border-slate-700 p-4 overflow-x-auto" data-v-5941cb1d>`);
|
||||||
|
_push(ssrRenderComponent(_component_RawDataViewer, {
|
||||||
|
data: provider.value.audit_trail
|
||||||
|
}, null, _parent));
|
||||||
|
_push(`</div></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
_push(`</div></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<!---->`);
|
||||||
|
}
|
||||||
|
if (activeTab.value === "history") {
|
||||||
|
_push(`<div data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-4" data-v-5941cb1d>Állapotváltoztatások előzményei</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d>Idővonal: ki, mikor és mit változtatott a szolgáltatóval kapcsolatban.</p>`);
|
||||||
|
if (historyLoading.value) {
|
||||||
|
_push(`<div class="flex items-center justify-center py-8" data-v-5941cb1d><svg class="w-5 h-5 animate-spin text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg></div>`);
|
||||||
|
} else if (history.value.length === 0) {
|
||||||
|
_push(`<div class="text-center py-8" data-v-5941cb1d><p class="text-slate-500" data-v-5941cb1d>Nincsenek előzmények ehhez a szolgáltatóhoz.</p></div>`);
|
||||||
|
} else {
|
||||||
|
_push(`<div class="relative" data-v-5941cb1d><div class="absolute left-4 top-0 bottom-0 w-0.5 bg-slate-700" data-v-5941cb1d></div><!--[-->`);
|
||||||
ssrRenderList(history.value, (entry, index2) => {
|
ssrRenderList(history.value, (entry, index2) => {
|
||||||
_push(`<div class="relative pl-10 pb-6 last:pb-0" data-v-aa1d3c94><div class="${ssrRenderClass([historyDotClass(entry.action), "absolute left-2.5 w-3 h-3 rounded-full border-2 mt-1.5"])}" data-v-aa1d3c94></div><div class="bg-slate-700/50 rounded-lg border border-slate-600 p-4" data-v-aa1d3c94><div class="flex items-start justify-between gap-4 mb-2" data-v-aa1d3c94><div data-v-aa1d3c94><span class="${ssrRenderClass([historyActionClass(entry.action), "text-xs font-medium px-2 py-0.5 rounded-full"])}" data-v-aa1d3c94>${ssrInterpolate(historyActionLabel(entry.action))}</span><span class="text-xs text-slate-500 ml-2" data-v-aa1d3c94> User #${ssrInterpolate(entry.user_id || "?")}</span></div><div class="text-xs text-slate-500 whitespace-nowrap" data-v-aa1d3c94>${ssrInterpolate(formatDate(entry.timestamp))}</div></div>`);
|
_push(`<div class="relative pl-10 pb-6 last:pb-0" data-v-5941cb1d><div class="${ssrRenderClass([historyDotClass(entry.action), "absolute left-2.5 w-3 h-3 rounded-full border-2 mt-1.5"])}" data-v-5941cb1d></div><div class="bg-slate-700/50 rounded-lg border border-slate-600 p-4" data-v-5941cb1d><div class="flex items-start justify-between gap-4 mb-2" data-v-5941cb1d><div data-v-5941cb1d><span class="${ssrRenderClass([historyActionClass(entry.action), "text-xs font-medium px-2 py-0.5 rounded-full"])}" data-v-5941cb1d>${ssrInterpolate(historyActionLabel(entry.action))}</span><span class="text-xs text-slate-500 ml-2" data-v-5941cb1d> User #${ssrInterpolate(entry.user_id || "?")}</span></div><div class="text-xs text-slate-500 whitespace-nowrap" data-v-5941cb1d>${ssrInterpolate(formatDate(entry.timestamp))}</div></div>`);
|
||||||
if (entry.new_data) {
|
if (entry.new_data) {
|
||||||
_push(`<div class="text-xs text-slate-400 space-y-1 mt-2" data-v-aa1d3c94>`);
|
_push(`<div class="text-xs text-slate-400 space-y-1 mt-2" data-v-5941cb1d>`);
|
||||||
if (entry.new_data.old_status || entry.new_data.new_status) {
|
if (entry.new_data.old_status || entry.new_data.new_status) {
|
||||||
_push(`<div class="flex items-center gap-2" data-v-aa1d3c94><span class="text-slate-500" data-v-aa1d3c94>Státusz:</span><span class="text-rose-400" data-v-aa1d3c94>${ssrInterpolate(entry.new_data.old_status || "?")}</span><svg class="w-3 h-3 text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" data-v-aa1d3c94></path></svg><span class="text-emerald-400" data-v-aa1d3c94>${ssrInterpolate(entry.new_data.new_status || "?")}</span></div>`);
|
_push(`<div class="flex items-center gap-2" data-v-5941cb1d><span class="text-slate-500" data-v-5941cb1d>Státusz:</span><span class="text-rose-400" data-v-5941cb1d>${ssrInterpolate(entry.new_data.old_status || "?")}</span><svg class="w-3 h-3 text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" data-v-5941cb1d></path></svg><span class="text-emerald-400" data-v-5941cb1d>${ssrInterpolate(entry.new_data.new_status || "?")}</span></div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (entry.new_data.reason && entry.new_data.reason !== "Admin edit") {
|
if (entry.new_data.reason && entry.new_data.reason !== "Admin edit") {
|
||||||
_push(`<div data-v-aa1d3c94><span class="text-slate-500" data-v-aa1d3c94>Indoklás:</span> ${ssrInterpolate(entry.new_data.reason)}</div>`);
|
_push(`<div data-v-5941cb1d><span class="text-slate-500" data-v-5941cb1d>Indoklás:</span> ${ssrInterpolate(entry.new_data.reason)}</div>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (entry.new_data.changes) {
|
if (entry.new_data.changes) {
|
||||||
_push(`<div class="mt-2" data-v-aa1d3c94><details class="text-xs" data-v-aa1d3c94><summary class="text-slate-500 cursor-pointer hover:text-slate-400" data-v-aa1d3c94>Részletes változások</summary><div class="mt-2 space-y-1" data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="mt-2" data-v-5941cb1d><details class="text-xs" data-v-5941cb1d><summary class="text-slate-500 cursor-pointer hover:text-slate-400" data-v-5941cb1d>Részletes változások</summary><div class="mt-2 space-y-1" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(entry.new_data.changes, (value, key) => {
|
ssrRenderList(entry.new_data.changes, (value, key) => {
|
||||||
_push(`<div class="flex gap-2" data-v-aa1d3c94><span class="text-slate-500 w-28 flex-shrink-0" data-v-aa1d3c94>${ssrInterpolate(key)}:</span><span class="text-slate-300 truncate" data-v-aa1d3c94>${ssrInterpolate(value ?? "—")}</span></div>`);
|
_push(`<div class="flex gap-2" data-v-5941cb1d><span class="text-slate-500 w-28 flex-shrink-0" data-v-5941cb1d>${ssrInterpolate(key)}:</span><span class="text-slate-300 truncate" data-v-5941cb1d>${ssrInterpolate(value ?? "—")}</span></div>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div></details></div>`);
|
_push(`<!--]--></div></details></div>`);
|
||||||
} else {
|
} else {
|
||||||
@@ -528,9 +637,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (entry.old_data) {
|
if (entry.old_data) {
|
||||||
_push(`<div class="mt-2" data-v-aa1d3c94><details class="text-xs" data-v-aa1d3c94><summary class="text-slate-500 cursor-pointer hover:text-slate-400" data-v-aa1d3c94>Régi adatok</summary><div class="mt-2 space-y-1" data-v-aa1d3c94><!--[-->`);
|
_push(`<div class="mt-2" data-v-5941cb1d><details class="text-xs" data-v-5941cb1d><summary class="text-slate-500 cursor-pointer hover:text-slate-400" data-v-5941cb1d>Régi adatok</summary><div class="mt-2 space-y-1" data-v-5941cb1d><!--[-->`);
|
||||||
ssrRenderList(entry.old_data, (value, key) => {
|
ssrRenderList(entry.old_data, (value, key) => {
|
||||||
_push(`<div class="flex gap-2" data-v-aa1d3c94><span class="text-slate-500 w-28 flex-shrink-0" data-v-aa1d3c94>${ssrInterpolate(key)}:</span><span class="text-slate-300 truncate" data-v-aa1d3c94>${ssrInterpolate(value ?? "—")}</span></div>`);
|
_push(`<div class="flex gap-2" data-v-5941cb1d><span class="text-slate-500 w-28 flex-shrink-0" data-v-5941cb1d>${ssrInterpolate(key)}:</span><span class="text-slate-300 truncate" data-v-5941cb1d>${ssrInterpolate(value ?? "—")}</span></div>`);
|
||||||
});
|
});
|
||||||
_push(`<!--]--></div></details></div>`);
|
_push(`<!--]--></div></details></div>`);
|
||||||
} else {
|
} else {
|
||||||
@@ -547,9 +656,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_push(`<!--]-->`);
|
_push(`<!--]-->`);
|
||||||
}
|
}
|
||||||
if (showRejectModal.value) {
|
if (showRejectModal.value) {
|
||||||
_push(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm" data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 w-full max-w-lg mx-4 shadow-2xl" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-2" data-v-aa1d3c94>Szolgáltató elutasítása</h2><p class="text-sm text-slate-400 mb-6" data-v-aa1d3c94> Biztosan elutasítod a(z) <strong class="text-white" data-v-aa1d3c94>${ssrInterpolate(provider.value?.name)}</strong> szolgáltatót? </p><form data-v-aa1d3c94><div class="mb-4" data-v-aa1d3c94><label class="block text-sm font-medium text-slate-300 mb-1" data-v-aa1d3c94>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg az elutasítás okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-rose-500/50 focus:border-rose-500 text-sm resize-none" data-v-aa1d3c94>${ssrInterpolate(rejectReason.value)}</textarea></div><div class="flex justify-end gap-3" data-v-aa1d3c94><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-aa1d3c94>Mégse</button><button type="submit"${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-rose-600 hover:bg-rose-500 disabled:bg-rose-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-aa1d3c94>`);
|
_push(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 w-full max-w-lg mx-4 shadow-2xl" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-2" data-v-5941cb1d>Szolgáltató elutasítása</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d> Biztosan elutasítod a(z) <strong class="text-white" data-v-5941cb1d>${ssrInterpolate(provider.value?.name)}</strong> szolgáltatót? </p><form data-v-5941cb1d><div class="mb-4" data-v-5941cb1d><label class="block text-sm font-medium text-slate-300 mb-1" data-v-5941cb1d>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg az elutasítás okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-rose-500/50 focus:border-rose-500 text-sm resize-none" data-v-5941cb1d>${ssrInterpolate(rejectReason.value)}</textarea></div><div class="flex justify-end gap-3" data-v-5941cb1d><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-5941cb1d>Mégse</button><button type="submit"${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-rose-600 hover:bg-rose-500 disabled:bg-rose-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-5941cb1d>`);
|
||||||
if (actionLoading.value) {
|
if (actionLoading.value) {
|
||||||
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
@@ -558,9 +667,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
if (showFlagModal.value) {
|
if (showFlagModal.value) {
|
||||||
_push(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm" data-v-aa1d3c94><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 w-full max-w-lg mx-4 shadow-2xl" data-v-aa1d3c94><h2 class="text-lg font-semibold text-white mb-2" data-v-aa1d3c94>Szolgáltató megjelölése</h2><p class="text-sm text-slate-400 mb-6" data-v-aa1d3c94> Biztosan megjelölöd a(z) <strong class="text-white" data-v-aa1d3c94>${ssrInterpolate(provider.value?.name)}</strong> szolgáltatót? </p><form data-v-aa1d3c94><div class="mb-4" data-v-aa1d3c94><label class="block text-sm font-medium text-slate-300 mb-1" data-v-aa1d3c94>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg a megjelölés okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-purple-500/50 focus:border-purple-500 text-sm resize-none" data-v-aa1d3c94>${ssrInterpolate(flagReason.value)}</textarea></div><div class="flex justify-end gap-3" data-v-aa1d3c94><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-aa1d3c94>Mégse</button><button type="submit"${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-purple-600 hover:bg-purple-500 disabled:bg-purple-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-aa1d3c94>`);
|
_push(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm" data-v-5941cb1d><div class="bg-slate-800 rounded-xl border border-slate-700 p-6 w-full max-w-lg mx-4 shadow-2xl" data-v-5941cb1d><h2 class="text-lg font-semibold text-white mb-2" data-v-5941cb1d>Szolgáltató megjelölése</h2><p class="text-sm text-slate-400 mb-6" data-v-5941cb1d> Biztosan megjelölöd a(z) <strong class="text-white" data-v-5941cb1d>${ssrInterpolate(provider.value?.name)}</strong> szolgáltatót? </p><form data-v-5941cb1d><div class="mb-4" data-v-5941cb1d><label class="block text-sm font-medium text-slate-300 mb-1" data-v-5941cb1d>Indoklás (opcionális)</label><textarea rows="3" placeholder="Add meg a megjelölés okát..." class="w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-purple-500/50 focus:border-purple-500 text-sm resize-none" data-v-5941cb1d>${ssrInterpolate(flagReason.value)}</textarea></div><div class="flex justify-end gap-3" data-v-5941cb1d><button type="button" class="px-4 py-2 text-sm text-slate-400 hover:text-white transition" data-v-5941cb1d>Mégse</button><button type="submit"${ssrIncludeBooleanAttr(actionLoading.value) ? " disabled" : ""} class="px-4 py-2 bg-purple-600 hover:bg-purple-500 disabled:bg-purple-600/50 text-white rounded-lg text-sm font-medium transition flex items-center gap-2" data-v-5941cb1d>`);
|
||||||
if (actionLoading.value) {
|
if (actionLoading.value) {
|
||||||
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-aa1d3c94><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-aa1d3c94></path></svg>`);
|
_push(`<svg class="w-4 h-4 animate-spin" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-5941cb1d><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" data-v-5941cb1d></path></svg>`);
|
||||||
} else {
|
} else {
|
||||||
_push(`<!---->`);
|
_push(`<!---->`);
|
||||||
}
|
}
|
||||||
@@ -578,8 +687,8 @@ _sfc_main.setup = (props, ctx) => {
|
|||||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/providers/[id]/index.vue");
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/providers/[id]/index.vue");
|
||||||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
||||||
};
|
};
|
||||||
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-aa1d3c94"]]);
|
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5941cb1d"]]);
|
||||||
export {
|
export {
|
||||||
index as default
|
index as default
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=index-Dzq5Dk7S.js.map
|
//# sourceMappingURL=index-DX46mH0u.js.map
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/index-DX46mH0u.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/index-DX46mH0u.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend_admin/.nuxt/dist/server/_nuxt/index-DX46mH0u.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/index-DX46mH0u.js.map.json
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +0,0 @@
|
|||||||
const index_vue_vue_type_style_index_0_scoped_aa1d3c94_lang = "input[type=range][data-v-aa1d3c94]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}input[type=range][data-v-aa1d3c94]::-moz-range-thumb{background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}.timeline-enter-active[data-v-aa1d3c94]{transition:all .3s ease-out}.timeline-enter-from[data-v-aa1d3c94]{opacity:0;transform:translate(-10px)}";
|
|
||||||
export {
|
|
||||||
index_vue_vue_type_style_index_0_scoped_aa1d3c94_lang as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=index-styles-1.mjs-C1Gt4hz3.js.map
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index-styles-1.mjs-C1Gt4hz3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"file":"index-styles-1.mjs-C1Gt4hz3.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
||||||
5
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js
vendored
Normal file
5
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const index_vue_vue_type_style_index_0_scoped_5941cb1d_lang = "input[type=range][data-v-5941cb1d]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}input[type=range][data-v-5941cb1d]::-moz-range-thumb{background:#6366f1;border:2px solid #1e293b;border-radius:50%;cursor:pointer;height:16px;width:16px}.timeline-enter-active[data-v-5941cb1d]{transition:all .3s ease-out}.timeline-enter-from[data-v-5941cb1d]{opacity:0;transform:translate(-10px)}";
|
||||||
|
export {
|
||||||
|
index_vue_vue_type_style_index_0_scoped_5941cb1d_lang as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=index-styles-1.mjs-CKaWEloo.js.map
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js.map
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index-styles-1.mjs-CKaWEloo.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
||||||
1
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js.map.json
vendored
Normal file
1
frontend_admin/.nuxt/dist/server/_nuxt/index-styles-1.mjs-CKaWEloo.js.map.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"file":"index-styles-1.mjs-CKaWEloo.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
import style_0 from "./index-styles-1.mjs-C1Gt4hz3.js";
|
|
||||||
export default [
|
|
||||||
style_0
|
|
||||||
]
|
|
||||||
4
frontend_admin/.nuxt/dist/server/_nuxt/index-styles.B-y3KW_p.mjs
vendored
Normal file
4
frontend_admin/.nuxt/dist/server/_nuxt/index-styles.B-y3KW_p.mjs
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import style_0 from "./index-styles-1.mjs-CKaWEloo.js";
|
||||||
|
export default [
|
||||||
|
style_0
|
||||||
|
]
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
frontend_admin/.nuxt/dist/server/server.mjs
vendored
4
frontend_admin/.nuxt/dist/server/server.mjs
vendored
@@ -571,7 +571,7 @@ const _routes = [
|
|||||||
{
|
{
|
||||||
name: "providers-id-edit",
|
name: "providers-id-edit",
|
||||||
path: "/providers/:id()/edit",
|
path: "/providers/:id()/edit",
|
||||||
component: () => import("./_nuxt/edit-DQMBygGu.js")
|
component: () => import("./_nuxt/edit-ZNmjSMhu.js")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "gamification-seasons",
|
name: "gamification-seasons",
|
||||||
@@ -582,7 +582,7 @@ const _routes = [
|
|||||||
{
|
{
|
||||||
name: "providers-id",
|
name: "providers-id",
|
||||||
path: "/providers/:id()",
|
path: "/providers/:id()",
|
||||||
component: () => import("./_nuxt/index-Dzq5Dk7S.js")
|
component: () => import("./_nuxt/index-DX46mH0u.js")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "gamification-parameters",
|
name: "gamification-parameters",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user