feat: pcat v2 — full catalog browsing with cars, groups, schema viewer
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled

Expand pcat API with getCars, getCarGroups, getSchemaImages, getSchemaDetail
endpoints. Add frontend routes for the complete flow:
catalog → model → car → groups → schema+parts with hotspots.
Reuses existing SchemaViewer component for interactive part diagrams.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 20:03:48 +00:00
parent c61ad8c175
commit ca4437b245
8 changed files with 716 additions and 120 deletions

View File

@@ -49,7 +49,9 @@ import { Route as DashboardVehiclesIdCategoriesCategoryIdRouteImport } from "./r
import { Route as DashboardCatalogPcatCatalogIdModelIdIndexRouteImport } from "./routes/dashboard/catalog_/pcat/$catalogId_/$modelId/index"
import { Route as DashboardCatalogEmexCatalogCodeVehicleIdIndexRouteImport } from "./routes/dashboard/catalog_/emex/$catalogCode_/$vehicleId/index"
import { Route as DashboardCatalogBrandNameModelIdCategoriesCategoryIdRouteImport } from "./routes/dashboard/catalog_/$brandName_/$modelId/categories_/$categoryId"
import { Route as DashboardCatalogPcatCatalogIdModelIdCarIdIndexRouteImport } from "./routes/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId/index"
import { Route as DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRouteImport } from "./routes/dashboard/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId"
import { Route as DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRouteImport } from "./routes/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId"
const TermsRoute = TermsRouteImport.update({
id: "/terms",
@@ -261,12 +263,24 @@ const DashboardCatalogBrandNameModelIdCategoriesCategoryIdRoute =
path: "/catalog/$brandName/$modelId/categories/$categoryId",
getParentRoute: () => DashboardRoute,
} as any)
const DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute =
DashboardCatalogPcatCatalogIdModelIdCarIdIndexRouteImport.update({
id: "/catalog_/pcat/$catalogId_/$modelId_/$carId/",
path: "/catalog/pcat/$catalogId/$modelId/$carId/",
getParentRoute: () => DashboardRoute,
} as any)
const DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute =
DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRouteImport.update({
id: "/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId",
path: "/catalog/emex/$catalogCode/$vehicleId/groups/$groupId",
getParentRoute: () => DashboardRoute,
} as any)
const DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute =
DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRouteImport.update({
id: "/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId",
path: "/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId",
getParentRoute: () => DashboardRoute,
} as any)
export interface FileRoutesByFullPath {
"/": typeof IndexRoute
@@ -309,6 +323,8 @@ export interface FileRoutesByFullPath {
"/dashboard/catalog/emex/$catalogCode/$vehicleId/": typeof DashboardCatalogEmexCatalogCodeVehicleIdIndexRoute
"/dashboard/catalog/pcat/$catalogId/$modelId/": typeof DashboardCatalogPcatCatalogIdModelIdIndexRoute
"/dashboard/catalog/emex/$catalogCode/$vehicleId/groups/$groupId": typeof DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute
"/dashboard/catalog/pcat/$catalogId/$modelId/$carId/": typeof DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute
"/dashboard/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId": typeof DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute
}
export interface FileRoutesByTo {
"/": typeof IndexRoute
@@ -350,6 +366,8 @@ export interface FileRoutesByTo {
"/dashboard/catalog/emex/$catalogCode/$vehicleId": typeof DashboardCatalogEmexCatalogCodeVehicleIdIndexRoute
"/dashboard/catalog/pcat/$catalogId/$modelId": typeof DashboardCatalogPcatCatalogIdModelIdIndexRoute
"/dashboard/catalog/emex/$catalogCode/$vehicleId/groups/$groupId": typeof DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute
"/dashboard/catalog/pcat/$catalogId/$modelId/$carId": typeof DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute
"/dashboard/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId": typeof DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
@@ -394,6 +412,8 @@ export interface FileRoutesById {
"/dashboard/catalog_/emex/$catalogCode_/$vehicleId/": typeof DashboardCatalogEmexCatalogCodeVehicleIdIndexRoute
"/dashboard/catalog_/pcat/$catalogId_/$modelId/": typeof DashboardCatalogPcatCatalogIdModelIdIndexRoute
"/dashboard/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId": typeof DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute
"/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId/": typeof DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute
"/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId": typeof DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
@@ -438,6 +458,8 @@ export interface FileRouteTypes {
| "/dashboard/catalog/emex/$catalogCode/$vehicleId/"
| "/dashboard/catalog/pcat/$catalogId/$modelId/"
| "/dashboard/catalog/emex/$catalogCode/$vehicleId/groups/$groupId"
| "/dashboard/catalog/pcat/$catalogId/$modelId/$carId/"
| "/dashboard/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId"
fileRoutesByTo: FileRoutesByTo
to:
| "/"
@@ -479,6 +501,8 @@ export interface FileRouteTypes {
| "/dashboard/catalog/emex/$catalogCode/$vehicleId"
| "/dashboard/catalog/pcat/$catalogId/$modelId"
| "/dashboard/catalog/emex/$catalogCode/$vehicleId/groups/$groupId"
| "/dashboard/catalog/pcat/$catalogId/$modelId/$carId"
| "/dashboard/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId"
id:
| "__root__"
| "/"
@@ -522,6 +546,8 @@ export interface FileRouteTypes {
| "/dashboard/catalog_/emex/$catalogCode_/$vehicleId/"
| "/dashboard/catalog_/pcat/$catalogId_/$modelId/"
| "/dashboard/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId"
| "/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId/"
| "/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId"
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
@@ -821,6 +847,13 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof DashboardCatalogBrandNameModelIdCategoriesCategoryIdRouteImport
parentRoute: typeof DashboardRoute
}
"/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId/": {
id: "/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId/"
path: "/catalog/pcat/$catalogId/$modelId/$carId"
fullPath: "/dashboard/catalog/pcat/$catalogId/$modelId/$carId/"
preLoaderRoute: typeof DashboardCatalogPcatCatalogIdModelIdCarIdIndexRouteImport
parentRoute: typeof DashboardRoute
}
"/dashboard/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId": {
id: "/dashboard/catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId"
path: "/catalog/emex/$catalogCode/$vehicleId/groups/$groupId"
@@ -828,6 +861,13 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRouteImport
parentRoute: typeof DashboardRoute
}
"/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId": {
id: "/dashboard/catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId"
path: "/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId"
fullPath: "/dashboard/catalog/pcat/$catalogId/$modelId/$carId/groups/$groupId"
preLoaderRoute: typeof DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRouteImport
parentRoute: typeof DashboardRoute
}
}
}
@@ -873,6 +913,8 @@ interface DashboardRouteChildren {
DashboardCatalogEmexCatalogCodeVehicleIdIndexRoute: typeof DashboardCatalogEmexCatalogCodeVehicleIdIndexRoute
DashboardCatalogPcatCatalogIdModelIdIndexRoute: typeof DashboardCatalogPcatCatalogIdModelIdIndexRoute
DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute: typeof DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute
DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute: typeof DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute
DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute: typeof DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute
}
const DashboardRouteChildren: DashboardRouteChildren = {
@@ -909,6 +951,10 @@ const DashboardRouteChildren: DashboardRouteChildren = {
DashboardCatalogPcatCatalogIdModelIdIndexRoute,
DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute:
DashboardCatalogEmexCatalogCodeVehicleIdGroupsGroupIdRoute,
DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute:
DashboardCatalogPcatCatalogIdModelIdCarIdIndexRoute,
DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute:
DashboardCatalogPcatCatalogIdModelIdCarIdGroupsGroupIdRoute,
}
const DashboardRouteWithChildren = DashboardRoute._addFileChildren(