feat: add used-car module and fix API response handling

- Add used-car pages: list, detail, create, edit, mine
- Add CarCard and PriceModal components
- Fix API response interceptor to accept both code 200 and 0
- Fix detail page: was incorrectly using edit page template
- Fix edit page: remove res.code check after API call
- Add image URL processing (localhost → localhost:8787)
- Add i18n translations for used-car module in 5 languages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
浅念
2026-03-11 16:11:49 +08:00
parent 8a056e2295
commit baa424c841
28 changed files with 6235 additions and 8 deletions
+96 -1
View File
@@ -29,7 +29,8 @@
"status": "Statut",
"remark": "Remarque",
"createTime": "Date de création",
"updateTime": "Date de mise à jour"
"updateTime": "Date de mise à jour",
"clear": "Effacer"
},
"dashboard": {
"welcome": "Bienvenue",
@@ -161,5 +162,99 @@
"lastMonth": "Mois Dernier",
"thisYear": "Cette Année",
"lastYear": "Année Dernière"
},
"usedCar": {
"title": "Voiture d'Occasion",
"code": "Code",
"search": "Rechercher",
"searchPlaceholder": "Rechercher véhicule",
"status": "Statut",
"statusNormal": "Normal",
"statusArchived": "Archivé",
"statusSold": "Vendu",
"markSold": "Marquer comme vendu",
"downloadPdf": "Télécharger PDF",
"share": "Partager",
"empty": "Aucune voiture",
"loadFailed": "Échec du chargement",
"pdfDownloadFailed": "Échec du téléchargement PDF",
"sourcePlace": "Lieu d'origine",
"bodyColor": "Couleur de la carrosserie",
"plateTime": "Date d'immatriculation",
"mileage": "Kilométrage",
"createdAt": "Créé le",
"productName": "Nom du produit",
"vin": "VIN",
"price": "Prix",
"displacement": "Cylindrée",
"power": "Puissance",
"conditionDesc": "Description de l'état",
"productImages": "Images du produit",
"attachments": "Pièces jointes",
"create": "Ajouter voiture",
"edit": "Modifier",
"delete": "Supprimer",
"detail": "Détail",
"submit": "Soumettre",
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression?",
"confirmMarkSold": "Marquer comme vendu?",
"deleteSuccess": "Supprimé",
"updateSuccess": "Mis à jour",
"createSuccess": "Créé",
"setPrice": "Définir le prix",
"tradeTerm": "Terme commercial",
"selectTradeTerm": "Sélectionnez le terme commercial",
"enterPrice": "Entrez le prix",
"currency": "Devise",
"language": "Langue",
"pdfDownloadSuccess": "PDF téléchargé avec succès",
"linkCopied": "Lien copié",
"notFound": "Véhicule introuvable",
"pageTitle": "Ajouter une Voiture d'occasion",
"bind": "Lier",
"bindProduct": "Lier le Produit",
"bindDialog": "Sélectionner le Modèle",
"brand": "Marque",
"series": "Série",
"bindSearchPlaceholder": "Rechercher modèle",
"bindSearching": "Recherche...",
"bindSearchFirst": "Veuillez d'abord entrer le nom du produit",
"bindNoModels": "Aucun modèle trouvé",
"bindNoResults": "Aucun résultat",
"bindConfirm": "Confirmer la Liaison",
"bindClear": "Effacer",
"bindBound": "Lié : ",
"bindSuccess": "Liaison réussie",
"bindCleared": "Liaison effacée",
"enterProductName": "Entrez la marque et la série du véhicule",
"enterProductNameFirst": "Veuillez d'abord entrer le nom du produit",
"bindFetchFailed": "Échec de la récupération des produits, réessayez plus tard",
"bindExample": "Ex: BYD Seal 07 DM",
"enterSourcePlace": "Entrez le lieu d'origine",
"selectPlateTime": "Sélectionner l'heure",
"enterDisplacement": "Entrez la cylindrée",
"enterPower": "Entrez la puissance",
"enterMileage": "Entrez le kilométrage",
"enterBodyColor": "Entrez la couleur de la carrosserie",
"enterConditionDesc": "Entrez la description de l'état",
"uploadImages": "Télécharger des Images",
"uploadAttachments": "Télécharger des Pièces Jointes",
"maxImages": "Maximum 20 images",
"maxAttachments": "Maximum 20 pièces jointes",
"uploading": "Téléchargement...",
"uploadFailed": "Échec du téléchargement",
"removeImage": "Supprimer",
"view": "Voir",
"requiredField": "Obligatoire",
"fillRequiredFields": "Veuillez remplir tous les champs obligatoires",
"confirmSubmit": "Confirmer l'envoi ?",
"myPublish": "Mes Publications",
"myGarage": "Mon Garage",
"quickEdit": "Modification Rapide",
"emptyMyPublish": "Vous n'avez pas encore publié de véhicules",
"myPage": "Mon",
"personalInfo": "Informations personnelles"
}
}