## Major Changes ### PL24 Integration (PartsLink24 API) - Add PL24 auth service with JWT token management - Add PL24 service for VIN decode and parts catalog - Support for VAG, Mercedes, BMW, Ford, Renault and more - Schema image download with base64 decoding - Image deduplication via SchemaPic table ### EMEX On-Demand Loading - Remove automatic parts scraping during VIN decode - Add fetchCategoryParts() for on-demand loading - Store category URLs in rawResponse for later fetching - Fix Chrome executable path for Puppeteer ### VIN Decode Flow - PL24 first, fallback to EMEX if not available - Both sources now use on-demand parts loading - Faster VIN lookup (no parts scraped upfront) ### Database Schema - Add SchemaPic model for image deduplication - Add schemaPicId to VehicleCategory - Add EMEX models for parallel scraping ### Frontend Improvements - Dark theme with Tailwind CSS - Improved UI components (card, button, input) - Better category and parts display - Schema image viewer Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
39 lines
7.0 KiB
HTML
39 lines
7.0 KiB
HTML
<!DOCTYPE html><html><head>
|
|
<meta charset="utf-8">
|
|
|
|
<!-- viewport-fit=cover -> for IOS notch matching -->
|
|
<!-- maximum-scale=1.0,user-scalable=0 -> no zooming on ios -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=0, viewport-fit=cover">
|
|
|
|
<title>partslink24</title>
|
|
|
|
<!-- favicons -->
|
|
<link rel="icon" href="/pl24-app/favicons/favicon.ico" sizes="32x32">
|
|
<link rel="icon" href="/pl24-app/favicons/favicon.svg" type="image/svg+xml">
|
|
<link rel="apple-touch-icon" href="/pl24-app/favicons/apple-touch-icon.png">
|
|
<link rel="mask-icon" href="/pl24-app/favicons/safari-pinned-tab.svg" color="#000000">
|
|
|
|
<meta name="msapplication-TileColor" content="#f7c400">
|
|
<meta name="msapplication-config" content="/favicons/browserconfig.xml">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
<meta name="format-detection" content="telephone=no">
|
|
|
|
<script type="text/javascript" data-metrics-id="653XEPU6" id="metrics" src="/pl24-app/metrics-loader.js"></script>
|
|
|
|
<script type="module" crossorigin="" src="/pl24-app/assets/index-e59f85ff.js"></script>
|
|
<link rel="modulepreload" crossorigin="" href="/pl24-app/assets/__federation_shared_react-a187c2a1.js">
|
|
<link rel="modulepreload" crossorigin="" href="/pl24-app/assets/__federation_shared_react-dom-435d0037.js">
|
|
<link rel="stylesheet" href="/pl24-app/assets/index-d2bb7e3e.css">
|
|
<link rel="manifest" href="/pl24-app/manifest.webmanifest"><style data-emotion="css-global" data-s=""></style><style data-emotion="css-global" data-s=""></style><style data-emotion="css-global" data-s=""></style><style data-emotion="css" data-s=""></style><script id="usercentrics-cmp" src="https://app.usercentrics.eu/browser-ui/latest/bundle.js" data-lang="en" data-settings-id="1dDyIAPUm" async=""></script><script async="" src="https://metrics.partslink24.com/js/container_653XEPU6.js"></script></head>
|
|
<body class="" style="">
|
|
<noscript>You need to enable JavaScript to run this testapp.</noscript>
|
|
<div id="root"><div class="_container_93u48_9" lang="en" style="height: 1080px;"><div aria-hidden="true" class="MuiBackdrop-root css-ps8t2m" style="opacity: 0; transition: opacity 195ms cubic-bezier(0.4, 0, 0.2, 1); visibility: hidden;"><div class="spinner-wrapper"><div class="spinner"></div></div></div><div class="_container_s5kdw_9" style="visibility: hidden; transform: translateY(55px);"><span class="icon icon--full-screen _icon_skck4_9" data-test-id="fullscreenToggle"></span></div><div class="_headerContainer_1gzni_9"><header class="_header_1gzni_9" data-test-id="header"><div class="_container_1gzni_41"><div class="_content_1gzni_56"><div class="_container_1wqol_9"><div class="_containerLeft_1wqol_16"><img src="/pl24-app/assets/logo-272a932c.png" class="_active_1i0o2_1" style="height: 32px;"></div><div class="_menuContainer_1wqol_28"></div></div></div></div></header></div><div class="_container_1qfhg_9"><div class="_contentContainer_1qfhg_18"><h5>Login</h5><form autocomplete="on"><div class="_formInputFields_1qfhg_38"><div class="MuiFormControl-root MuiTextField-root css-feqhe6"><label class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined css-6pmd2t" data-shrink="true" for="account" id="account-label">Company ID / partslink24 ID</label><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl MuiInputBase-sizeSmall css-r8ai5h"><input aria-invalid="false" id="account" type="text" maxlength="16" class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputSizeSmall css-pgotkk" value="tr-903645"><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-igs3ac"><legend class="css-kg5swy"><span>Company ID / partslink24 ID</span></legend></fieldset></div></div><div class="MuiFormControl-root MuiTextField-root css-feqhe6"><label class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined css-6pmd2t" data-shrink="true" for="username" id="username-label">User name</label><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl MuiInputBase-sizeSmall css-r8ai5h"><input aria-invalid="false" autocomplete="username" id="username" type="text" maxlength="16" class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputSizeSmall css-pgotkk" value="admin"><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-igs3ac"><legend class="css-kg5swy"><span>User name</span></legend></fieldset></div></div><div class="MuiFormControl-root MuiTextField-root css-feqhe6"><label class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-focused MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-sizeSmall MuiInputLabel-outlined css-6pmd2t" data-shrink="true" for="password" id="password-label">Password</label><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-focused MuiInputBase-formControl MuiInputBase-sizeSmall MuiInputBase-adornedEnd css-1syd95j"><input aria-invalid="false" autocomplete="current-password" id="password" type="password" class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputSizeSmall MuiInputBase-inputAdornedEnd css-18aie37" value="Fener900*"><div class="MuiInputAdornment-root MuiInputAdornment-positionEnd MuiInputAdornment-outlined MuiInputAdornment-sizeSmall css-10jn56z"><span class="icon icon-btn icon--eye-off _icon_skck4_9" style="background-color: rgb(255, 255, 255);"></span></div><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-igs3ac"><legend class="css-kg5swy"><span>Password</span></legend></fieldset></div></div></div><a href="/partslink24/user/forgottenPassword.do" target="_blank" rel="noopener noreferrer">Password forgotten?</a><button class="_btn_aow59_9 _autoWidth_aow59_24 _desktop_aow59_45 _btn-primary_aow59_30" type="submit" data-test-id="loginButton"><div class="_container_aow59_81">Log in</div></button></form></div></div></div>,</div>
|
|
|
|
|
|
|
|
<div id="usercentrics-root" data-created-at="1769006495330" style=""></div><iframe id="uc-cross-domain-bridge" src="https://app.usercentrics.eu/browser-sdk/4.59.0/cross-domain-bridge.html" style="display: none;"></iframe><style id="uc-overflow-style">.overflowHidden {overflow: hidden !important;}</style></body></html> |