diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3982507 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +node_modules +dist +.git +.gitignore +.env +.env.local +*.log +.vscode +.idea +coverage diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..d3d8334 --- /dev/null +++ b/.env.production @@ -0,0 +1 @@ +VITE_API_BASE_URL=https://parche.montest.ir/server/api diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1f89853 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +# داک‌پلوی: Build Type = Dockerfile ، پورت ۸۰ +FROM node:22-alpine AS build +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +ARG VITE_API_BASE_URL=https://parche.montest.ir/server/api +ENV VITE_API_BASE_URL=$VITE_API_BASE_URL +RUN npm run build-only + +FROM nginx:1.27-alpine +COPY deploy/nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=build /app/dist /usr/share/nginx/html +EXPOSE 80 diff --git a/deploy/nginx.conf b/deploy/nginx.conf new file mode 100644 index 0000000..50d3eb3 --- /dev/null +++ b/deploy/nginx.conf @@ -0,0 +1,19 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + gzip on; + gzip_types text/plain text/css application/javascript application/json image/svg+xml; + + location /assets/ { + expires 7d; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + + location / { + try_files $uri $uri/ /index.html; + } +} diff --git a/src/views/home/HomeView.vue b/src/views/home/HomeView.vue index abf1f6a..e2ae66e 100644 --- a/src/views/home/HomeView.vue +++ b/src/views/home/HomeView.vue @@ -70,6 +70,12 @@ let bannerTimer: number | undefined const banner = computed(() => banners.value[bannerIndex.value] ?? FALLBACK_BANNER) +const heroStyle = computed(() => { + const image = banner.value.imageUrl + if (!image) return undefined + return { '--hero-image': `url("${image}")` } +}) + function startBannerRotation() { stopBannerRotation() if (banners.value.length < 2) return @@ -193,7 +199,7 @@ async function toggleFavorite(productId: string) {

diff --git a/vite.config.ts b/vite.config.ts index 3630f73..b204145 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,12 +7,12 @@ import vueDevTools from 'vite-plugin-vue-devtools' import UnoCSS from '@unocss/vite' // https://vite.dev/config/ -export default defineConfig({ +export default defineConfig(({ mode }) => ({ plugins: [ vue(), vueJsx(), UnoCSS(), - vueDevTools(), + ...(mode === 'development' ? [vueDevTools()] : []), ], resolve: { alias: { @@ -28,4 +28,4 @@ export default defineConfig({ }, }, }, -}) +}))