Merge branch 'develop'
This commit is contained in:
commit
ecd58d1fb1
30 changed files with 2641 additions and 2314 deletions
|
|
@ -19,7 +19,15 @@
|
|||
"**/vendor/*.sass",
|
||||
"**/vendor/**/*.sass",
|
||||
"**/vendor/*.less",
|
||||
"**/vendor/**/*.less"
|
||||
"**/vendor/**/*.less",
|
||||
"**/node_modules/*.css",
|
||||
"**/node_modules/**/*.css",
|
||||
"**/node_modules/*.scss",
|
||||
"**/node_modules/**/*.scss",
|
||||
"**/node_modules/*.sass",
|
||||
"**/node_modules/**/*.sass",
|
||||
"**/node_modules/*.less",
|
||||
"**/node_modules/**/*.less"
|
||||
],
|
||||
"customSyntax": "postcss-scss",
|
||||
"rules": {
|
||||
|
|
@ -29,8 +37,6 @@
|
|||
"order/properties-alphabetical-order": null,
|
||||
"max-nesting-depth": 5,
|
||||
"selector-max-compound-selectors": 5,
|
||||
"declaration-colon-newline-after": null,
|
||||
"value-list-comma-newline-after": null,
|
||||
"scss/double-slash-comment-empty-line-before": [
|
||||
"always",
|
||||
{
|
||||
|
|
|
|||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"peacock.remoteColor": "#1fee8e",
|
||||
"workbench.colorCustomizations": {
|
||||
"activityBar.activeBackground": "#4ef2a6",
|
||||
"activityBar.background": "#4ef2a6",
|
||||
|
|
@ -17,6 +18,5 @@
|
|||
"titleBar.activeForeground": "#15202b",
|
||||
"titleBar.inactiveBackground": "#1fee8e99",
|
||||
"titleBar.inactiveForeground": "#15202b99"
|
||||
},
|
||||
"peacock.remoteColor": "#1fee8e"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
94
README.md
94
README.md
|
|
@ -1,8 +1,94 @@
|
|||
# Nuxt 3 Minimal Starter
|
||||
# Showroom - App Expo
|
||||
Update : 25-09-2025
|
||||
## Prerequisites
|
||||
|
||||
### Binaries
|
||||
- Node & NPM
|
||||
- Wine & Wine32
|
||||
|
||||
#### Wine
|
||||
```bash
|
||||
sudo dpkg --add-architecture i386 # Allow Win32 arch for packaging
|
||||
sudo apt-get update
|
||||
sudo apt-get install wine wine32
|
||||
```
|
||||
|
||||
In Ubuntu, if you get an error for : libgphoto2-6t64:i386 related to libgd3:i386
|
||||
|
||||
```bash
|
||||
sudo nano /etc/apt/preferences.d/99-libgd3-ubuntu.pref
|
||||
```
|
||||
Add :
|
||||
```text
|
||||
Package: libgd3
|
||||
Pin: release o=Ubuntu
|
||||
Pin-Priority: 1001
|
||||
|
||||
Package: libgd3:i386
|
||||
Pin: release o=Ubuntu
|
||||
Pin-Priority: 1001
|
||||
|
||||
Package: libgphoto2-6
|
||||
Pin: release o=Ubuntu
|
||||
Pin-Priority: 1001
|
||||
|
||||
Package: libgphoto2-6:i386
|
||||
Pin: release o=Ubuntu
|
||||
Pin-Priority: 1001
|
||||
```
|
||||
Then :
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt dist-upgrade
|
||||
|
||||
rm -rf ~/.wine
|
||||
```
|
||||
|
||||
### Datas
|
||||
Put .zip export from backend and put it in :
|
||||
|
||||
```bash
|
||||
./static/data
|
||||
```
|
||||
|
||||
ex:
|
||||
|
||||
```bash
|
||||
ls static/data
|
||||
```
|
||||
return :
|
||||
```bash
|
||||
showroom-bo-export_25-09-2025_10-15-05.zip
|
||||
```
|
||||
|
||||
/!\ You can have multiple .zip files, program always get the last one for building.
|
||||
|
||||
## Production
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Last command give you an .exe in folder below :
|
||||
```bash
|
||||
release/
|
||||
```
|
||||
For example :
|
||||
```bash
|
||||
ls release/2.3.3
|
||||
```
|
||||
Should return :
|
||||
```bash
|
||||
'App UWIL Expo_2.3.3.exe' builder-debug.yml builder-effective-config.yaml win-unpacked
|
||||
```
|
||||
'App UWIL Expo_2.3.3.exe' is the production deliverable.
|
||||
## Development
|
||||
|
||||
### Nuxt 3 Minimal Starter
|
||||
|
||||
Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
||||
|
||||
## Setup
|
||||
### Setup
|
||||
|
||||
Make sure to install the dependencies:
|
||||
|
||||
|
|
@ -20,7 +106,7 @@ yarn install
|
|||
bun install
|
||||
```
|
||||
|
||||
## Development Server
|
||||
### Development Server
|
||||
|
||||
Start the development server on `http://localhost:3000`:
|
||||
|
||||
|
|
@ -38,7 +124,7 @@ yarn dev
|
|||
bun run dev
|
||||
```
|
||||
|
||||
## Production
|
||||
### Production
|
||||
|
||||
Build the application for production:
|
||||
|
||||
|
|
|
|||
23
app.vue
23
app.vue
|
|
@ -11,7 +11,7 @@
|
|||
>
|
||||
<template v-if="!loading">
|
||||
<AppHeader :active-brand="activeBrand" :active-range="activeRange" />
|
||||
<div class="container-fluid overflow-y-scroll p-0">
|
||||
<div class="container-fluid overflow-auto p-0">
|
||||
<NuxtPage :page-key="(route: RouteLocation) => route.fullPath" />
|
||||
</div>
|
||||
<NavigationMenu v-if="showNavigation" />
|
||||
|
|
@ -86,6 +86,7 @@ export default defineComponent({
|
|||
this.loading = false;
|
||||
this.setTimeout();
|
||||
dataJson.fonts.forEach(font => this.injectFontFace(font.font_name, font.font));
|
||||
this.redirectIfOneBrand(dataJson.items);
|
||||
});
|
||||
},
|
||||
mounted() {
|
||||
|
|
@ -103,6 +104,9 @@ export default defineComponent({
|
|||
t(text: string, params: Record<string,string> = {}, localeToUse: string|null = null): string {
|
||||
return ToolboxHelper.trans(text, params, localeToUse);
|
||||
},
|
||||
transField(model: Typei18nModel, field: Typei18nFieldList) {
|
||||
return ToolboxHelper.getTranslatableField(model, field);
|
||||
},
|
||||
injectFontFace(fontName: string, fontPath: string|null) {
|
||||
const newStyle = document.createElement("style");
|
||||
if(fontPath) {
|
||||
|
|
@ -113,7 +117,18 @@ export default defineComponent({
|
|||
}
|
||||
document.head.appendChild(newStyle);
|
||||
},
|
||||
/** Prolong le timer pour revenir au home screen */
|
||||
/** Redirect to ranges.index if there is only one brand. */
|
||||
redirectIfOneBrand(brands: Array<TypeBrand>): void {
|
||||
if (brands.length === 1) {
|
||||
useAppStore().setActiveBrand(brands[0]);
|
||||
this.activeBrand = brands[0];
|
||||
navigateTo(useLocaleRoute()({"name": "brands-slug", "params": {"slug": this.transField(brands[0], "slug")}}));
|
||||
} else {
|
||||
useAppStore().setActiveBrand(null);
|
||||
this.activeBrand = null;
|
||||
}
|
||||
},
|
||||
/** Prolong le timer pour revenir au home screen. */
|
||||
setTimeout(): void {
|
||||
if(this.timeout) {
|
||||
clearTimeout(this.timeout);
|
||||
|
|
@ -121,7 +136,9 @@ export default defineComponent({
|
|||
this.$nextTick(() => {
|
||||
this.timeout = setTimeout(() => {
|
||||
useAppStore().setActiveRange(null);
|
||||
useAppStore().setActiveBrand(null);
|
||||
window.ipcRendererObject.getJsonData().then((dataJson) => {
|
||||
this.redirectIfOneBrand(dataJson.items);
|
||||
});
|
||||
navigateTo(useLocaleRoute()({"name": "index"}));
|
||||
}, useAppStore().getSettings().home_timeout * 1000);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ $color-secondary: #6c757d;
|
|||
|
||||
// * FONTS
|
||||
$font-default-family-base: system-ui, -apple-system, "Segoe UI", "Roboto",
|
||||
"Helvetica Neue", "Arial", "Noto Sans", "Liberation Sans", sans-serif,
|
||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; // - The default site font family.
|
||||
"Helvetica Neue", "Arial", "Noto Sans", "Liberation Sans", sans-serif,
|
||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; // - The default site font family.
|
||||
// Display tres haute résolution, augmentation de font size 1rem => 1.8rem
|
||||
$font-default-size-base: 1.4rem; // Assumes the browser default, typically `16px`
|
||||
$line-default-height-base: 1.5;
|
||||
|
|
@ -27,4 +27,4 @@ $container-max-widths: (
|
|||
lg: 960px,
|
||||
xl: 1140px,
|
||||
xxl: 1520px
|
||||
);
|
||||
);
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
body {
|
||||
@include font-size(1rem);
|
||||
|
||||
min-height: 100vh;
|
||||
max-height: 100vh;
|
||||
// * Use BS var to set BG as on home page
|
||||
// background-color: unset;
|
||||
|
||||
|
|
@ -49,7 +49,8 @@ body {
|
|||
@include font-size(4rem);
|
||||
}
|
||||
|
||||
&::before,&::after {
|
||||
&::before,
|
||||
&::after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
display: inline-block;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
@import "./sweetalert-custom";
|
||||
@import 'animate.css';
|
||||
|
||||
|
||||
// * App
|
||||
@import "./layout";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="container border-top border-3 border-secondary">
|
||||
<div class="row py-4">
|
||||
<div class="col arrow pe-3 d-flex align-items-center justify-content-end">
|
||||
<button
|
||||
class="rounded-pill btn btn-primary px-4 py-1"
|
||||
class="rounded-pill btn btn-secondary px-4 py-1"
|
||||
:disabled="previousRange === null"
|
||||
:title="previousRange ? t('view_range_products', {'range_name': transField(previousRange, 'name')}) : ''"
|
||||
data-bs-toggle="tooltip"
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
</div>
|
||||
<div class="col home text-center px-3">
|
||||
<button
|
||||
class="rounded-pill btn btn-primary px-4 py-1"
|
||||
class="rounded-pill btn btn-secondary px-4 py-1"
|
||||
:title="activeBrand ? t('view_brand_ranges', {'brand_name': transField(activeBrand, 'name')}) : ''"
|
||||
data-bs-toggle="tooltip"
|
||||
@click="gotoBrand(activeBrand)"
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
</div>
|
||||
<div class="col arrow ps-3 d-flex align-items-center justify-content-start">
|
||||
<button
|
||||
class="rounded-pill btn btn-primary px-4 py-1"
|
||||
class="rounded-pill btn btn-secondary px-4 py-1"
|
||||
:disabled="nextRange === null"
|
||||
:title="nextRange ? t('view_range_products', {'range_name': transField(nextRange, 'name')}) : ''"
|
||||
data-bs-toggle="tooltip"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div id="product-modal" ref="modal" class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xxl modal-fullscreen-md-down">
|
||||
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-xl modal-fullscreen-md-down">
|
||||
<div class="modal-content bg-white">
|
||||
<div class="modal-header position-relative">
|
||||
<h5
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
<template>
|
||||
<footer
|
||||
v-if="brands.length > 1 || versions.isDebug"
|
||||
id="footer"
|
||||
ref="footer"
|
||||
class="container-fluid flex-grow-0"
|
||||
:style="`background-color: ${activeRange && brandWithMultipleRanges ? activeRange.color : activeBrand?.color} !important`"
|
||||
>
|
||||
<div class="row">
|
||||
<div
|
||||
v-if="brands.length > 1"
|
||||
class="row"
|
||||
>
|
||||
<div class="col-12 col-md-4 d-flex justify-content-center align-items-center">
|
||||
<span
|
||||
class="fw-bold d-block px-5"
|
||||
|
|
@ -35,10 +39,10 @@
|
|||
},
|
||||
}"
|
||||
>
|
||||
<SwiperSlide v-for="(brand,brandIndex) of brands" :key="brandIndex">
|
||||
<SwiperSlide v-for="(brand, brandIndex) of brands" :key="brandIndex">
|
||||
<NuxtLinkLocale
|
||||
class="swiper-slide"
|
||||
:to="`/brands/${brand.slug}`"
|
||||
:to="`/brands/${transField(brand, 'slug')}`"
|
||||
data-bs-toggle="tooltip"
|
||||
:title="t('view_brand_ranges', {'brand_name': transField(brand, 'name')})"
|
||||
@click.prevent="gotoBrand(brand)"
|
||||
|
|
@ -166,7 +170,6 @@ export default defineComponent({
|
|||
return ToolboxHelper.getContrastYIQ(hexcolor);
|
||||
},
|
||||
gotoBrand(brand: TypeBrand) {
|
||||
useAppStore().setActiveBrand(null);
|
||||
useAppStore().setActiveRange(null);
|
||||
useAppStore().setActiveBrand(brand);
|
||||
navigateTo(useLocaleRoute()({"name": "brands-slug", "params": {"slug": this.transField(brand, "slug")}}));
|
||||
|
|
|
|||
|
|
@ -14,14 +14,14 @@
|
|||
'mx-auto': !activeRange,
|
||||
}"
|
||||
>
|
||||
<NuxtLinkLocale
|
||||
:to="`/brands/${transField(activeBrand, 'slug')}`"
|
||||
<button
|
||||
:class="{
|
||||
'd-inline-block py-3 px-2 text-center': true,
|
||||
'd-inline-block py-3 px-2 text-center bg-transparent border-0': true,
|
||||
'flex-grow-1': !activeRange
|
||||
}"
|
||||
data-bs-toggle="tooltip"
|
||||
:title="t('view_brand_ranges', {'brand_name': transField(activeBrand, 'name')})"
|
||||
@click="goToBrand(activeBrand)"
|
||||
>
|
||||
<img
|
||||
class="img-fluid main-logo"
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
:title="t('brands_logo', {'brand_name': transField(activeBrand, 'name')})"
|
||||
data-bs-toggle="tooltip"
|
||||
>
|
||||
</NuxtLinkLocale>
|
||||
</button>
|
||||
<div v-if="activeRange && brandWithMultipleRanges" class="flex-grow-1 text-center">
|
||||
<span
|
||||
:class="{...{
|
||||
|
|
@ -76,21 +76,22 @@
|
|||
</button>
|
||||
|
||||
<div id="navbar-menu" class="lang-bar navbar-collapse collapse flex-grow-0">
|
||||
<div class="btn-group me-4 z-1">
|
||||
<div class="btn-group z-1">
|
||||
<button
|
||||
v-for="(localeObject,localeIndex) of locales"
|
||||
v-for="(localeObject, localeIndex) of locales"
|
||||
:key="localeIndex"
|
||||
:class="{
|
||||
'btn px-4 mx-3 shadow fw-bold': true,
|
||||
'btn-white bg-white': locale !== localeObject.iso,
|
||||
'btn ms-3 px-4 mx-0 shadow fw-bold': true,
|
||||
'btn-secondary': locale === localeObject.iso,
|
||||
'btn-white bg-white': locale !== localeObject.iso,
|
||||
}"
|
||||
:title="localeObject.label"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="bottom"
|
||||
@click.prevent="switchLocale(localeObject)"
|
||||
>
|
||||
<span class="text-uppercase fs-1">{{ localeObject.flag }}</span>
|
||||
<!-- <span :class="`fi fi-${localeObject.flag}`" /> -->
|
||||
<span class="text-uppercase fs-5">{{ localeObject.flag }}</span>
|
||||
<span :class="`fi fi-${localeObject.flag}`" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -166,7 +167,10 @@ export default defineComponent({
|
|||
this.settings = useAppStore().data.settings();
|
||||
const { locale, availableLocales } = useI18n({ useScope: "global"});
|
||||
this.locale = locale.value;
|
||||
const localeSortArr = ["fr", "nl"];
|
||||
let localeSortArr = [] as Array<string>;
|
||||
window.ipcRendererObject.getJsonData().then((dataJson) => {
|
||||
localeSortArr = dataJson.settings.locales;
|
||||
});
|
||||
this.locales = availableLocales.sort((LocA, LocB) => localeSortArr.indexOf(LocA) - localeSortArr.indexOf(LocB)).map(localeStr => {
|
||||
return {
|
||||
iso: localeStr,
|
||||
|
|
@ -208,6 +212,13 @@ export default defineComponent({
|
|||
toRGBA(hexcolor: string, alpha: number = 1): string {
|
||||
return ToolboxHelper.toRGBA(hexcolor, alpha);
|
||||
},
|
||||
goToBrand(activeBrand: TypeBrand): void {
|
||||
if(!activeBrand) {
|
||||
return;
|
||||
}
|
||||
useAppStore().setActiveRange(null);
|
||||
navigateTo(useLocaleRoute()({"name": "brands-slug", "params": {"slug": activeBrand.slug[this.locale]}}));
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
@ -248,7 +259,9 @@ export default defineComponent({
|
|||
|
||||
.main-logo {
|
||||
@include rfs(7rem, max-height);
|
||||
height: 20vh;
|
||||
& {
|
||||
height: 20vh;
|
||||
}
|
||||
@include media-breakpoint-up(md) {
|
||||
@include rfs(15rem, max-height);
|
||||
}
|
||||
|
|
@ -266,11 +279,19 @@ export default defineComponent({
|
|||
@include rfs(5em, width);
|
||||
}
|
||||
}
|
||||
|
||||
.lang-bar {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 5rem;
|
||||
right: 1rem;
|
||||
top: 0;
|
||||
}
|
||||
.lang-bar .btn-group {
|
||||
border-radius: 0;
|
||||
}
|
||||
.lang-bar .btn-group button {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-left-radius: 1rem;
|
||||
border-bottom-right-radius: 1rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
{
|
||||
appId: "com.ldc.app-kiosk",
|
||||
productName: "App Kiosk",
|
||||
productName: "App UWIL Expo",
|
||||
asar: false,
|
||||
directories: {
|
||||
output: "release/${version}",
|
||||
|
|
@ -12,18 +12,18 @@
|
|||
mac: {
|
||||
artifactName: "${productName}_${version}.${ext}",
|
||||
target: ["dmg"],
|
||||
icon: "ldc-intl.png",
|
||||
icon: "uwil-expo-icon.png",
|
||||
},
|
||||
win: {
|
||||
target: [
|
||||
{
|
||||
target: "nsis",
|
||||
target: "portable",
|
||||
arch: ["x64"],
|
||||
},
|
||||
],
|
||||
artifactName: "${productName}_${version}.${ext}",
|
||||
icon: "ldc-intl.png",
|
||||
publisherName: "LDC Service Web",
|
||||
icon: "uwil-expo-icon.png",
|
||||
publisherName: "LDC DIGITAL Groupe",
|
||||
},
|
||||
linux: {
|
||||
category: "Utility",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import fs from "node:fs";
|
||||
import path from "path";
|
||||
import AdmZip from "adm-zip";
|
||||
import Ajv from "ajv";
|
||||
import { Ajv } from "ajv";
|
||||
import addFormats from "ajv-formats";
|
||||
import log from "electron-log/main";
|
||||
|
||||
|
|
@ -48,13 +48,18 @@ export default abstract class UnzipData {
|
|||
|
||||
const zip = new AdmZip(fs.readFileSync(UnzipData.zipFileToUse));
|
||||
UnzipData.removeOldExtractedFiles();
|
||||
zip.extractAllTo("public/data");
|
||||
zip.extractAllTo(publicPath + "/data");
|
||||
|
||||
// * Schemas Copy for production build
|
||||
if (!isDev) {
|
||||
fs.cpSync(path.join(root, "public/schemas"), path.join(publicPath, "schemas"), { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
public static removeOldExtractedFiles() {
|
||||
private static removeOldExtractedFiles() {
|
||||
// * Clear export dir
|
||||
fs.rmSync("public/data/pictures", { recursive: true, force: true });
|
||||
fs.rmSync("public/data/data.json", { recursive: true, force: true });
|
||||
fs.rmSync(publicPath + "/data/pictures", { recursive: true, force: true });
|
||||
fs.rmSync(publicPath + "/data/data.json", { recursive: true, force: true });
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -71,13 +71,14 @@ app.whenReady().then(() => {
|
|||
// width: 1280,
|
||||
// height: 900,
|
||||
center: true,
|
||||
kiosk: true,
|
||||
kiosk: process.env.NODE_ENV !== "development",
|
||||
closable: false,
|
||||
alwaysOnTop: true,
|
||||
fullscreen: true,
|
||||
fullscreen: process.env.NODE_ENV !== "development",
|
||||
autoHideMenuBar: true,
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, "preload.js")
|
||||
preload: path.join(__dirname, "preload.js"),
|
||||
devTools: process.env.NODE_ENV === "development",
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
|
||||
// console.log("versions.chrome()");
|
||||
// console.log(app.chrome());
|
||||
|
|
@ -1,14 +1,18 @@
|
|||
// import en from "./locales/en";
|
||||
import fr from "./locales/fr";
|
||||
import nl from "./locales/nl";
|
||||
export default defineI18nConfig(async () => {
|
||||
const dataJson = await window.ipcRendererObject.getJsonData();
|
||||
const localeCodes = dataJson.settings.locales;
|
||||
|
||||
export default defineI18nConfig(() => ({
|
||||
legacy: false,
|
||||
globalInjection: true,
|
||||
locale: "nl",
|
||||
fallbackLocale: "fr",
|
||||
messages: {
|
||||
fr,
|
||||
nl
|
||||
const messages: Record<string, any> = {};
|
||||
|
||||
for (const locale of localeCodes) {
|
||||
messages[locale] = (await import(`./locales/${locale}.ts`)).default;
|
||||
}
|
||||
}));
|
||||
|
||||
return {
|
||||
legacy: false,
|
||||
globalInjection: true,
|
||||
locale: "fr",
|
||||
fallbackLocale: "fr",
|
||||
messages,
|
||||
};
|
||||
});
|
||||
|
|
|
|||
10
index.d.ts
vendored
10
index.d.ts
vendored
|
|
@ -1,14 +1,12 @@
|
|||
export { };
|
||||
|
||||
import type { RouteLocation as NRouteLocation } from "vue-router";
|
||||
import type { ipcRendererObject, versions } from "./electron/preload";
|
||||
import type { RouteLocation as NRouteLocation } from "vue-router";
|
||||
import type { ipcRendererObject, versions } from "./electron/preload";
|
||||
|
||||
// * --- MODELS From JSON Schema
|
||||
|
||||
type Locale = string;
|
||||
type i18nFieldList =
|
||||
"name" | "slug" | "description" |
|
||||
"sub_title" | "footer_phrase";
|
||||
type i18nFieldList = "name" | "slug" | "description" | "sub_title" | "footer_phrase";
|
||||
type i18nField = Record<string, string>;
|
||||
type i18nModel = SettingsModel | BrandModel | RangeModel | ProductModel;
|
||||
|
||||
|
|
@ -23,6 +21,8 @@ type AppModel = {
|
|||
|
||||
/** Settings from Showroom Bo */
|
||||
type SettingsModel = {
|
||||
/** Langues disponibles dans l'application */
|
||||
locales: Array<string>
|
||||
/** Sous-titre de l'application */
|
||||
sub_title: i18nField;
|
||||
/** Texte en bas de page */
|
||||
|
|
|
|||
BIN
ldc-intl.png
BIN
ldc-intl.png
Binary file not shown.
|
Before Width: | Height: | Size: 94 KiB |
19
locales/de.ts
Normal file
19
locales/de.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
export default {
|
||||
"_flag": "de",
|
||||
"_lang": "Deutsch",
|
||||
"error_occured": "Ein Fehler ist aufgetreten.",
|
||||
"loading": "Laden",
|
||||
"show_hide_languages": "Sprachen anzeigen/ausblenden",
|
||||
"view_brand_ranges": "Sortimente der Marke {brand_name} anzeigen",
|
||||
"brands_logo": "Logo für die Marke {brand_name}",
|
||||
"no_brands_available": "Keine Marken verfügbar",
|
||||
"view_range_products": "Produkte der Reihe {range_name} anzeigen",
|
||||
"ranges_logo": "Logo für die Produktreihe {range_name}",
|
||||
"no_ranges_available": "Keine Bereiche verfügbar",
|
||||
"more_about_this_product": "Mehr über dieses Produkt",
|
||||
"close_products_modal": "Produktbeschreibung schließen",
|
||||
"products_logo": "Logo für das Produkt {product_name}",
|
||||
"no_products_available": "Keine Produkte verfügbar",
|
||||
"welcome_to_ldc": "Willkommen bei LDC",
|
||||
"discover_our_brands": "Entdecken Sie unsere Marken"
|
||||
};
|
||||
19
locales/es.ts
Normal file
19
locales/es.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
export default {
|
||||
"_flag": "es",
|
||||
"_lang": "Español",
|
||||
"error_occured": "Se ha producido un error",
|
||||
"loading": "Loading",
|
||||
"show_hide_languages": "Mostrar / Ocultar idiomas",
|
||||
"view_brand_ranges": "Ver las gamas de la marca {brand_name}",
|
||||
"brands_logo": "Logotipo de la marca {brand_name}",
|
||||
"no_brands_available": "No hay marcas disponibles",
|
||||
"view_range_products": "Ver los productos de la gama {range_name}",
|
||||
"ranges_logo": "Logotipo de la gama {range_name}",
|
||||
"no_ranges_available": "No hay gamas disponibles",
|
||||
"more_about_this_product": "Más información sobre este producto",
|
||||
"close_products_modal": "Cerrar descripción de productos",
|
||||
"products_logo": "Logotipo del producto {product_name}",
|
||||
"no_products_available": "No hay productos disponibles",
|
||||
"welcome_to_ldc": "bienvenido a LDC",
|
||||
"discover_our_brands": "Descubra nuestras marcas"
|
||||
};
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
import { resolve } from "path";
|
||||
import log from "electron-log/main";
|
||||
import UnzipData from "./electron/UnzipData";
|
||||
|
||||
UnzipData.loadZipFileContent();
|
||||
|
||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
export default defineNuxtConfig({
|
||||
|
|
@ -9,7 +11,7 @@ export default defineNuxtConfig({
|
|||
if (["typecheck", "postinstall"].filter(action => action === process.env.npm_lifecycle_event).length) {
|
||||
return;
|
||||
}
|
||||
UnzipData.loadZipFileContent();
|
||||
log.info("Typecheck and lint OK");
|
||||
}
|
||||
},
|
||||
experimental: {
|
||||
|
|
@ -45,7 +47,7 @@ export default defineNuxtConfig({
|
|||
pageTransition: { name: "page", mode: "out-in" },
|
||||
// Global page headers: https://go.nuxtjs.dev/config-head
|
||||
head: {
|
||||
title: "showroom",
|
||||
title: "UWIL Expo by LDC",
|
||||
meta: [
|
||||
{ charset: "utf-8" },
|
||||
{ name: "viewport", content: "width=device-width, initial-scale=1" },
|
||||
|
|
@ -58,7 +60,6 @@ export default defineNuxtConfig({
|
|||
}
|
||||
},
|
||||
},
|
||||
|
||||
plugins: [
|
||||
{ src: "~/plugins/toolboxhelper.ts", mode: "client" },
|
||||
{ src: "~/plugins/boostrap.ts", mode: "client" },
|
||||
|
|
@ -66,15 +67,13 @@ export default defineNuxtConfig({
|
|||
{ src: "~/plugins/localStorage.ts", mode: "client" },
|
||||
{ src: "~/plugins/emitter.ts", mode: "client" },
|
||||
],
|
||||
|
||||
alias: {
|
||||
// images: resolve(__dirname, "./static/assets/images"),
|
||||
data: resolve(__dirname, "./static/data"),
|
||||
pinia: "/node_modules/@pinia/nuxt/node_modules/pinia/dist/pinia.mjs"
|
||||
},
|
||||
|
||||
i18n: {
|
||||
locales: ["fr", "nl"],
|
||||
locales: UnzipData.loadJsonDataFile()?.settings.locales,
|
||||
defaultLocale: "fr",
|
||||
// * Ajouter aussi la locale dans ce fichier
|
||||
vueI18n: "./i18n.config.ts"
|
||||
|
|
|
|||
4235
package-lock.json
generated
Normal file → Executable file
4235
package-lock.json
generated
Normal file → Executable file
File diff suppressed because it is too large
Load diff
70
package.json
70
package.json
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"author": {
|
||||
"name": "LDC Service Web",
|
||||
"email": "equipe.web@ldc.fr"
|
||||
"name": "LDC DIGITAL Groupe",
|
||||
"email": "digital@ldc.fr"
|
||||
},
|
||||
"description": "Application Kiosk",
|
||||
"version": "1.1.0",
|
||||
"name": "app-kiosk",
|
||||
"description": "UWIL Expo",
|
||||
"version": "2.3.3",
|
||||
"name": "uwil-expo",
|
||||
"private": true,
|
||||
"type": "commonjs",
|
||||
"main": "dist-electron/main.js",
|
||||
|
|
@ -14,8 +14,8 @@
|
|||
"static/**/*"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "nuxi build --prerender && electron-builder",
|
||||
"dev": "nuxt dev",
|
||||
"build": "nuxi build --prerender && electron-builder -w",
|
||||
"dev": "cross-env NODE_ENV=development nuxt dev",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"cleanup": "nuxt cleanup",
|
||||
|
|
@ -24,66 +24,68 @@
|
|||
"lint:ts": "npm run typecheck",
|
||||
"lint:js": "eslint --ext \".js,.ts,.vue\" --ignore-path .gitignore .",
|
||||
"lint:style": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 \"assets/**/*.{css,scss,sass,html,vue}\" --ignore-path .gitignore",
|
||||
"lint": "npm run lint:js && npm run lint:style && lint:ts",
|
||||
"lint": "npm run lint:js && npm run lint:style && npm run lint:ts",
|
||||
"lint:fix": "npm run lint:js --fix && npm run lint:style --fix",
|
||||
"validate": "npm-run-all --parallel lint:js lint:style lint:ts",
|
||||
"prepare": "husky install"
|
||||
"prepare": "husky"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.5",
|
||||
"@nuxt/devtools": "^1.0.0-beta.1",
|
||||
"@nuxtjs/eslint-config-typescript": "latest",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.7.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.8",
|
||||
"@nuxt/devtools": "^1.3.9",
|
||||
"@nuxtjs/eslint-config-typescript": "^12.1.0",
|
||||
"@nuxtjs/i18n": "^8.0.0",
|
||||
"@pinia/nuxt": "^0.5.1",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@types/adm-zip": "^0.5.5",
|
||||
"@types/adm-zip": "^0.5.7",
|
||||
"@types/bootstrap": "^5.2.10",
|
||||
"@types/dompurify": "^3.0.3",
|
||||
"@types/konami-code-js": "^0.8.1",
|
||||
"@types/konami-code-js": "^0.8.3",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
"adm-zip": "^0.5.10",
|
||||
"ajv": "^8.12.0",
|
||||
"adm-zip": "^0.5.16",
|
||||
"ajv": "^8.17.1",
|
||||
"ajv-formats": "^2.1.1",
|
||||
"animate.css": "^4.1.1",
|
||||
"bootstrap": "^5.3.2",
|
||||
"dompurify": "^3.0.6",
|
||||
"bootstrap": "^5.3.7",
|
||||
"cross-env": "^10.0.0",
|
||||
"dompurify": "^3.2.6",
|
||||
"electron": "^28.1.1",
|
||||
"electron-builder": "^24.9.1",
|
||||
"electron-log": "^5.0.3",
|
||||
"electron-serve": "^1.2.0",
|
||||
"eslint": "latest",
|
||||
"eslint-config-prettier": "latest",
|
||||
"eslint-plugin-nuxt": "latest",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-nuxt": "^4.0.0",
|
||||
"eslint-plugin-vue": "^9.17.0",
|
||||
"flag-icons": "^7.1.0",
|
||||
"husky": "^8.0.3",
|
||||
"flag-icons": "^7.5.0",
|
||||
"husky": "^9.1.7",
|
||||
"jest": "^29.7.0",
|
||||
"konami-code-js": "^0.8.1",
|
||||
"konami-code-js": "^0.8.3",
|
||||
"mitt": "^3.0.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"nuxt": "^3.7.4",
|
||||
"nuxt-electron": "^0.7.0",
|
||||
"pinia": "^3.0.3",
|
||||
"postcss": "^8.4.31",
|
||||
"postcss-html": "^1.5.0",
|
||||
"postcss-import": "^16.0.0",
|
||||
"postcss-url": "^10.1.3",
|
||||
"prettier": "latest",
|
||||
"sass": "latest",
|
||||
"prettier": "^3.2.4",
|
||||
"sass": "^1.70.0",
|
||||
"stylelint": "^15.11.0",
|
||||
"stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order",
|
||||
"stylelint-config-sass-guidelines": "^10.0.0",
|
||||
"stylelint-config-standard-scss": "^11.1.0",
|
||||
"stylelint-scss": "^5.3.2",
|
||||
"sweetalert2": "^11.7.32",
|
||||
"swiper": "^11.0.5",
|
||||
"sweetalert2": "^11.22.1",
|
||||
"swiper": "^11.2.8",
|
||||
"typescript": ">=4.3.5 <5.3.0",
|
||||
"vite": "^4.4.11",
|
||||
"vite-plugin-electron": "^0.15.5",
|
||||
"vite-plugin-electron-renderer": "^0.14.5",
|
||||
"vue": "^3.3.4",
|
||||
"vue-router": "^4.2.5"
|
||||
"vue": "^3.5.17",
|
||||
"vue-router": "^4.5.1",
|
||||
"vue-tsc": "^2.2.10"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="page-home d-flex text-bg-light">
|
||||
<div :class="{'page-home d-flex': true, 'text-bg-light': multipleBrands}">
|
||||
<div class="container-fluid justify-content-center d-flex flex-column">
|
||||
<div class="row">
|
||||
<div v-if="multipleBrands" class="row">
|
||||
<div class="col-12 text-center overflow-hidden pb-5">
|
||||
<div class="home-title">
|
||||
{{ t('welcome_to_ldc') }}
|
||||
|
|
@ -22,24 +22,22 @@
|
|||
</video>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="appState.brands" class="row">
|
||||
<div class="col-12 text-center overflow-hidden pb-5">
|
||||
<div class="home-title">
|
||||
{{ t('discover_our_brands') }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="appState.brands" class="row h-100 align-items-center">
|
||||
<div
|
||||
v-for="(brand, brandIndex) of appState.brands()"
|
||||
:key="brandIndex"
|
||||
:class="{
|
||||
'col-12 col-md-6 px-5 my-3': true,
|
||||
'align-items-center': true,
|
||||
'col-12': !multipleBrands,
|
||||
'col-12 col-md-6 px-5 my-3': multipleBrands,
|
||||
}"
|
||||
>
|
||||
<div
|
||||
:class="{
|
||||
'd-flex align-items-center h-100 my-5': true,
|
||||
'justify-content-start': brandIndex %2 !== 0,
|
||||
'justify-content-end': brandIndex %2 === 0,
|
||||
'd-flex h-100 my-2': true,
|
||||
'justify-content-start': brandIndex %2 !== 0 && multipleBrands,
|
||||
'justify-content-end': brandIndex %2 === 0 && multipleBrands,
|
||||
'justify-content-center': !multipleBrands,
|
||||
}"
|
||||
>
|
||||
<div
|
||||
|
|
@ -49,7 +47,7 @@
|
|||
data-bs-toggle="tooltip"
|
||||
@click="gotoBrand(brand)"
|
||||
>
|
||||
<div class="d-inline-block brand-picture-wrapper">
|
||||
<div class="d-inline-block brand-picture-wrapper shadow">
|
||||
<img
|
||||
class="img-fluid"
|
||||
:src="`/data/${brand.picture}`"
|
||||
|
|
@ -76,7 +74,7 @@
|
|||
<span class="h4">{{ t('no_brands_available') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row my-5 pb-5">
|
||||
<div v-if="multipleBrands" class="row my-5 pb-5">
|
||||
<div class="col py-5 my-5 pb-5">
|
||||
<img
|
||||
src="assets/pictures/layout/home-bottom-banner.png"
|
||||
|
|
@ -104,18 +102,21 @@ export default defineComponent({
|
|||
animateIndex: number|null;
|
||||
animations: Array<string>;
|
||||
tooltips: Tooltips|null;
|
||||
multipleBrands: boolean;
|
||||
} {
|
||||
return {
|
||||
appState: {} as AppState,
|
||||
animateTimeout: undefined,
|
||||
animateIndex: null,
|
||||
animations: ["heartBeat", "tada", "shakeX", "rubberBand"],
|
||||
tooltips: null
|
||||
tooltips: null,
|
||||
multipleBrands: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {this.tooltips = Tooltips.make({type:"parent", parentSelector: ".page-home"});});
|
||||
this.appState = useAppStore().data;
|
||||
this.multipleBrands = this.appState.brands().length > 1;
|
||||
|
||||
// * ANIMATIONS
|
||||
clearTimeout(this.animateTimeout);
|
||||
|
|
@ -147,7 +148,7 @@ export default defineComponent({
|
|||
},
|
||||
setBrandToAnimate(): void {
|
||||
clearTimeout(this.animateTimeout);
|
||||
this.animateIndex = ToolboxHelper.randomInteger(0, this.appState.brands().length -1);
|
||||
this.animateIndex = ToolboxHelper.randomInteger(0, this.appState.brands().length - 1);
|
||||
this.animateTimeout = setTimeout(this.setBrandToAnimate, ToolboxHelper.randomInteger(2000, 6000));
|
||||
},
|
||||
titleAnimations(brandIndex: number) {
|
||||
|
|
@ -175,15 +176,17 @@ export default defineComponent({
|
|||
|
||||
.page-home, .page-home>div {
|
||||
min-height: 100%;
|
||||
|
||||
.brand-picture-wrapper {
|
||||
@include rfs(5rem, border-radius);
|
||||
|
||||
background-color: $color-white;
|
||||
@include rfs(3rem, padding-top);
|
||||
@include rfs(3rem, padding-bottom);
|
||||
@include rfs(8rem, padding-right);
|
||||
@include rfs(8rem, padding-left);
|
||||
|
||||
background-color: $color-white;
|
||||
}
|
||||
.brand {
|
||||
border-radius: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ type Events = {
|
|||
|
||||
const emitter = mitt<Events>();
|
||||
|
||||
|
||||
const $bus = {
|
||||
$on: emitter.on,
|
||||
$emit: emitter.emit,
|
||||
|
|
|
|||
|
|
@ -43,10 +43,6 @@
|
|||
"description": "Couleur de la marque",
|
||||
"$ref": "#/$defs/hexcolor"
|
||||
},
|
||||
"shelf": {
|
||||
"description": "Les enfant sont rendus sur un étagere.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"status": {
|
||||
"description": "Visible ? (présent dans l'export).",
|
||||
"type": "boolean"
|
||||
|
|
@ -82,7 +78,6 @@
|
|||
"name",
|
||||
"slug",
|
||||
"color",
|
||||
"shelf",
|
||||
"status",
|
||||
"picture",
|
||||
"created_at",
|
||||
|
|
|
|||
|
|
@ -58,10 +58,6 @@
|
|||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"shelf": {
|
||||
"description": "Les enfant sont rendus sur un étagere.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"status": {
|
||||
"description": "Visible ? (présent dans l'export).",
|
||||
"type": "boolean"
|
||||
|
|
@ -104,7 +100,6 @@
|
|||
"slug",
|
||||
"picture",
|
||||
"order",
|
||||
"shelf",
|
||||
"status",
|
||||
"brand_id",
|
||||
"font_id",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,10 @@
|
|||
"description": "Settings from Showroom Bo",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"locales": {
|
||||
"description": "Langues disponibles dans l'application",
|
||||
"type": "array"
|
||||
},
|
||||
"sub_title": {
|
||||
"description": "Sous-titre de l'application",
|
||||
"type": "object",
|
||||
|
|
@ -59,6 +63,7 @@
|
|||
}
|
||||
},
|
||||
"required": [
|
||||
"locales",
|
||||
"sub_title",
|
||||
"footer_phrase",
|
||||
"logo",
|
||||
|
|
|
|||
|
|
@ -1,253 +0,0 @@
|
|||
{
|
||||
"logo": {
|
||||
"src": "https://www.legaulois.fr/assets/images/logo-lgl_378.webp",
|
||||
"width": "300px"
|
||||
},
|
||||
"title": "SIRHA 2023",
|
||||
"modalSettings": {
|
||||
"ctaBtnText": "Je suis intéressé(e) par ce produit",
|
||||
"ctaDisclaimerText": "* en cochant la case j'accepte le RGPD etc ...",
|
||||
"ctaSaveBtn": "Enregister ma demande"
|
||||
},
|
||||
"itemsByLine": 4,
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "Brochettes traditionnelles de poulet Thym-Citron",
|
||||
"teaser": "Les brochettes comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/1d0f4ad0c7d173c2dfa2cd6e8aea3b69_95c0cd5b-8db4-41bf-8037-195b8d31b376-brochettes-traditionnelle-de-poulet-thym-citron-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "Brochettes traditionnelles de poulet Provençale",
|
||||
"teaser": "Les brochettes traditionnelles comme chez le boucher",
|
||||
"img": "https://www.legaulois.fr/storage/cache/images/d879530b9284a7f17901269256cb3c1c_9865467c-86b6-493c-9a30-fabbaeabdff2-brochettes-poulet-provencale-le-gauloispng.",
|
||||
"description": "Le Gaulois Professionnel vous propose ses brochettes de filet de poulet extra tendre marinées thym - citron.Cette brochette généreuse(160 - 190 g) est constituée d’ un filet de poulet né, élevé et préparé en France.Présentée de façon traditionnelle et qualitative, sa marinade thym citron, douce et typée,ravira tous les gourmands, petits et grands.<br><br>Conseils de préparation : <br><br>À la plancha: Snacker votre brochette 3 minutes sur chaque faces pour obtenir une belle coloration puis, à feu doux, finir la cuisson environ 10 à 15 minutes. <br>Au four: Enfourner vos brochettes à 160° C et laisser cuire 15 à 20 minutes. <br>Au barbecue: environ 15 minutes"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
uwil-expo-icon.png
Normal file
BIN
uwil-expo-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Loading…
Add table
Reference in a new issue