Compare commits
2 Commits
4f39fa072a
...
07158311e2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07158311e2 | ||
|
|
f972f68875 |
14
dealplustech-astro/.astro/content.d.ts
vendored
14
dealplustech-astro/.astro/content.d.ts
vendored
@@ -162,11 +162,19 @@ declare module 'astro:content' {
|
||||
};
|
||||
|
||||
type DataEntryMap = {
|
||||
"products": Record<string, {
|
||||
"blog": Record<string, {
|
||||
id: string;
|
||||
body?: string;
|
||||
collection: "blog";
|
||||
data: any;
|
||||
rendered?: RenderedContent;
|
||||
filePath?: string;
|
||||
}>;
|
||||
"products": Record<string, {
|
||||
id: string;
|
||||
body?: string;
|
||||
collection: "products";
|
||||
data: InferEntrySchema<"products">;
|
||||
data: any;
|
||||
rendered?: RenderedContent;
|
||||
filePath?: string;
|
||||
}>;
|
||||
@@ -202,6 +210,6 @@ declare module 'astro:content' {
|
||||
LiveContentConfig['collections'][C]['loader']
|
||||
>;
|
||||
|
||||
export type ContentConfig = typeof import("../src/content.config.js");
|
||||
export type ContentConfig = typeof import("../src/content.config.mjs");
|
||||
export type LiveContentConfig = never;
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
# Astro Production Dockerfile
|
||||
FROM node:20-alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm ci --omit=dev
|
||||
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
EXPOSE 4321
|
||||
|
||||
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]
|
||||
@@ -1,21 +1,4 @@
|
||||
# Build Stage
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
|
||||
# Install dependencies
|
||||
RUN npm ci
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build the project
|
||||
RUN npm run build
|
||||
|
||||
# Production Stage
|
||||
# Astro Production Dockerfile
|
||||
FROM node:20-alpine
|
||||
|
||||
WORKDIR /app
|
||||
@@ -23,20 +6,17 @@ WORKDIR /app
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
|
||||
# Install production dependencies only
|
||||
RUN npm ci --production
|
||||
# Install dependencies
|
||||
RUN npm ci --omit=dev
|
||||
|
||||
# Copy built assets from builder
|
||||
COPY --from=builder /app/dist ./dist
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder /app/astro.config.mjs ./
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build Astro project (includes public folder in dist)
|
||||
RUN npm run build
|
||||
|
||||
# Expose port
|
||||
EXPOSE 4321
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:4321', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||||
|
||||
# Start the server
|
||||
# Start Astro preview server
|
||||
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]
|
||||
|
||||
3
dealplustech-astro/dist/_noop-middleware.mjs
vendored
Normal file
3
dealplustech-astro/dist/_noop-middleware.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const onRequest = (_, next) => next();
|
||||
|
||||
export { onRequest };
|
||||
4
dealplustech-astro/dist/blog/index.html
vendored
4
dealplustech-astro/dist/blog/index.html
vendored
File diff suppressed because one or more lines are too long
112
dealplustech-astro/dist/blog/ข้อดี-ท่อ-hdpe.md/index.html
vendored
Normal file
112
dealplustech-astro/dist/blog/ข้อดี-ท่อ-hdpe.md/index.html
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v5.18.0"><meta name="description" content="ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" href="/favicon.ico" sizes="any"><link rel="apple-touch-icon" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title" content="ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม"><meta property="og:description" content="ท่อ HDPE (High Density Polyethylene) เป็นท่อที่ได้รับความนิยมสูงในงานระบบน้ำ เนื่องจากความทนทานและความยืดหยุ่นที่เหนือกว่าท่อชนิดอื่น"><meta property="og:image" content="/og-image.jpg"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม | ดีล พลัส เทค</title><style>html{font-family:Kanit,system-ui,sans-serif}
|
||||
</style></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ท่อ HDPE</span> <time class="text-secondary-500"> 10 มกราคม 2567 </time> <span class="text-secondary-500">•</span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/03/hdpe-pipe_000C.jpg" alt="ข้อดีของท่อ HDPE ในงานระบบน้ำ ทำไมถึงเป็นตัวเลือกยอดนิยม" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ท่อ-hdpe-คืออะไร">ท่อ HDPE คืออะไร?</h2>
|
||||
<p>ท่อ HDPE (High Density Polyethylene) หรือท่อเอชดีพีอี เป็นท่อที่ผลิตจากโพลิเอทิลีนความหนาแน่นสูง เป็นวัสดุพลาสติกที่มีความแข็งแรงและทนทานเป็นอย่างมาก</p>
|
||||
<h2 id="ข้อดีของท่อ-hdpe">ข้อดีของท่อ HDPE</h2>
|
||||
<h3 id="1-ความยืดหยุ่นสูง">1. ความยืดหยุ่นสูง</h3>
|
||||
<p>ท่อ HDPE สามารถโค้งงอได้ถึง 45 องศา ทำให้เหมาะสำหรับพื้นที่ติดตั้งจำกัด และสามารถรองรับการเคลื่อนไหวของดินได้ดี</p>
|
||||
<h3 id="2-ทนทานต่อสารเคมี">2. ทนทานต่อสารเคมี</h3>
|
||||
<p>ท่อ HDPE ทนทานต่อการกัดกร่อนของสารเคมี กรด และด่าง ทำให้เหมาะสำหรับงานอุตสาหกรรม</p>
|
||||
<h3 id="3-อายุการใช้งานยาวนาน">3. อายุการใช้งานยาวนาน</h3>
|
||||
<p>ท่อ HDPE มีอายุการใช้งานมากกว่า 50 ปี เมื่อติดตั้งและใช้งานอย่างถูกต้อง</p>
|
||||
<h3 id="4-น้ำหนักเบา">4. น้ำหนักเบา</h3>
|
||||
<p>ท่อ HDPE มีน้ำหนักเบากว่าท่อโลหะ ทำให้ง่ายต่อการขนส่งและติดตั้ง</p>
|
||||
<h3 id="5-การเชื่อมต่อที่แน่นหนา">5. การเชื่อมต่อที่แน่นหนา</h3>
|
||||
<p>การเชื่อมท่อ HDPE ด้วยวิธี Butt Fusion ทำให้ท่อเชื่อมต่อกันเป็นเนื้อเดียว ไม่มีรอยต่อ ป้องกันการรั่วซึม</p>
|
||||
<h3 id="6-ปลอดภัยต่อสุขภาพ">6. ปลอดภัยต่อสุขภาพ</h3>
|
||||
<p>ท่อ HDPE ไม่เป็นสนิม ไม่ปล่อยสารพิษ ปลอดภัยสำหรับน้ำดื่ม</p>
|
||||
<h2 id="การใช้งานท่อ-hdpe">การใช้งานท่อ HDPE</h2>
|
||||
<h3 id="งานประปา">งานประปา</h3>
|
||||
<ul>
|
||||
<li>ท่อส่งน้ำประปา</li>
|
||||
<li>ระบบประปาในบ้านเรือน</li>
|
||||
<li>ระบบประปาในอาคาร</li>
|
||||
</ul>
|
||||
<h3 id="งานเกษตร">งานเกษตร</h3>
|
||||
<ul>
|
||||
<li>ระบบน้ำหยด</li>
|
||||
<li>ระบบสปริงเกลอร์</li>
|
||||
<li>ระบบน้ำเพื่อการเกษตร</li>
|
||||
</ul>
|
||||
<h3 id="งานอุตสาหกรรม">งานอุตสาหกรรม</h3>
|
||||
<ul>
|
||||
<li>ท่อส่งสารเคมี</li>
|
||||
<li>ระบบบำบัดน้ำเสีย</li>
|
||||
<li>งานโรงงานอุตสาหกรรม</li>
|
||||
</ul>
|
||||
<h3 id="งานโครงสร้างพื้นฐาน">งานโครงสร้างพื้นฐาน</h3>
|
||||
<ul>
|
||||
<li>งานท่อใต้ดิน</li>
|
||||
<li>ท่อร้อยสายไฟ</li>
|
||||
<li>งานสาธารณูปโภค</li>
|
||||
</ul>
|
||||
<h2 id="ขนาดท่อ-hdpe-ที่นิยมใช้">ขนาดท่อ HDPE ที่นิยมใช้</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<table><thead><tr><th>ขนาด (มม.)</th><th>การใช้งาน</th></tr></thead><tbody><tr><td>16-32</td><td>งานประปาภายในบ้าน</td></tr><tr><td>40-63</td><td>งานประปาอาคารขนาดเล็ก</td></tr><tr><td>75-110</td><td>งานประปาอาคารขนาดใหญ่</td></tr><tr><td>125-315</td><td>งานท่อส่งน้ำหลัก</td></tr><tr><td>355-1200</td><td>งานโครงสร้างพื้นฐาน</td></tr></tbody></table>
|
||||
<h2 id="เกรดของท่อ-hdpe">เกรดของท่อ HDPE</h2>
|
||||
<h3 id="pe80">PE80</h3>
|
||||
<ul>
|
||||
<li>เหมาะสำหรับงานทั่วไป</li>
|
||||
<li>ทนแรงดันสูงสุด 8 MPa</li>
|
||||
</ul>
|
||||
<h3 id="pe100">PE100</h3>
|
||||
<ul>
|
||||
<li>เหมาะสำหรับงานที่ต้องการความแข็งแรงสูง</li>
|
||||
<li>ทนแรงดันสูงสุด 10 MPa</li>
|
||||
<li>เป็นเกรดที่นิยมใช้ในปัจจุบัน</li>
|
||||
</ul>
|
||||
<h2 id="การติดตั้งท่อ-hdpe">การติดตั้งท่อ HDPE</h2>
|
||||
<h3 id="วิธี-butt-fusion">วิธี Butt Fusion</h3>
|
||||
<ol>
|
||||
<li>ตัดท่อให้ตรง</li>
|
||||
<li>ทำความสะอาดผิวท่อ</li>
|
||||
<li>ใช้เครื่องเชื่อมท่อ HDPE</li>
|
||||
<li>ให้ความร้อนจนผิวท่อละลาย</li>
|
||||
<li>กดท่อเข้าด้วยกัน</li>
|
||||
<li>รอให้เย็นตัวลง</li>
|
||||
</ol>
|
||||
<h3 id="วิธี-electrofusion">วิธี Electrofusion</h3>
|
||||
<ol>
|
||||
<li>ใช้ข้อต่อแบบ Electrofusion</li>
|
||||
<li>เสียบปลั๊กไฟเข้ากับข้อต่อ</li>
|
||||
<li>รอจนกระบวนการเชื่อมเสร็จสิ้น</li>
|
||||
</ol>
|
||||
<h2 id="สรุป">สรุป</h2>
|
||||
<p>ท่อ HDPE เป็นตัวเลือกที่ยอดเยี่ยมสำหรับงานระบบน้ำ เนื่องจากมีความทนทาน ความยืดหยุ่น และอายุการใช้งานที่ยาวนาน ไม่ว่าจะเป็นงานประปา งานเกษตร หรืองานอุตสาหกรรม ท่อ HDPE สามารถตอบโจทย์ได้ทุกการใช้งาน</p>
|
||||
<hr>
|
||||
<p><strong>สนใจสินค้าท่อ HDPE?</strong>
|
||||
ติดต่อเราได้ที่:</p>
|
||||
<ul>
|
||||
<li>โทร: 090-555-1415</li>
|
||||
<li>LINE: jppselection</li>
|
||||
</ul>
|
||||
<p><a href="/%E0%B8%97%E0%B9%88%E0%B8%ADhdpe">ดูสินค้าท่อ HDPE ทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
|
||||
กลับสู่หน้าบทความ
|
||||
</a> </div> </article> </main> </body></html>
|
||||
64
dealplustech-astro/dist/blog/ท่อ-ppr-คืออะไร.md/index.html
vendored
Normal file
64
dealplustech-astro/dist/blog/ท่อ-ppr-คืออะไร.md/index.html
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v5.18.0"><meta name="description" content="ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" href="/favicon.ico" sizes="any"><link rel="apple-touch-icon" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title" content="ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน"><meta property="og:description" content="ท่อ PPR (Polypropylene Random Copolymer) เป็นท่อพลาสติกที่ได้รับความนิยมสูงในการใช้งานระบบประปา บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับท่อ PPR"><meta property="og:image" content="/og-image.jpg"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน | ดีล พลัส เทค</title><style>html{font-family:Kanit,system-ui,sans-serif}
|
||||
</style></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ท่อ PPR</span> <time class="text-secondary-500"> 15 มกราคม 2567 </time> <span class="text-secondary-500">•</span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/03/ppr-pipe_000C.jpg" alt="ท่อ PPR คืออะไร? คู่มือฉบับสมบูรณ์สำหรับการเลือกใช้งาน" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ท่อ-ppr-คืออะไร">ท่อ PPR คืออะไร?</h2>
|
||||
<p>ท่อ PPR (Polypropylene Random Copolymer) หรือท่อพีพีอาร์ เป็นท่อพลาสติกที่ผลิตจากเม็ดพลาสติก PP-R 80 (Polypropylene Random Copolymer 80) ซึ่งเป็นวัสดุพลาสติกคุณภาพสูงที่มีความแข็งแรงและทนทานเป็นอย่างดี</p>
|
||||
<h2 id="ข้อดีของท่อ-ppr">ข้อดีของท่อ PPR</h2>
|
||||
<h3 id="1-ทนแรงดันและอุณหภูมิสูง">1. ทนแรงดันและอุณหภูมิสูง</h3>
|
||||
<p>ท่อ PPR สามารถทนแรงดันได้สูงถึง 20 บาร์ และทนต่ออุณหภูมิได้สูงถึง 95°C ทำให้เหมาะสำหรับใช้งานทั้งระบบน้ำเย็นและน้ำร้อน</p>
|
||||
<h3 id="2-สะอาดและปลอดภัย">2. สะอาดและปลอดภัย</h3>
|
||||
<p>ท่อ PPR ไม่เป็นสนิม ปราศจากโลหะหนักและสิ่งปนเปื้อน ทำให้น้ำที่ไหลผ่านสะอาดและปลอดภัยต่อการบริโภค</p>
|
||||
<h3 id="3-อายุการใช้งานยาวนาน">3. อายุการใช้งานยาวนาน</h3>
|
||||
<p>ด้วยคุณสมบัติที่ทนทาน ท่อ PPR มีอายุการใช้งานยาวนานกว่า 50 ปี</p>
|
||||
<h3 id="4-ติดตั้งง่าย">4. ติดตั้งง่าย</h3>
|
||||
<p>การเชื่อมต่อท่อ PPR ใช้วิธีเชื่อมด้วยความร้อน ทำให้ท่อและข้อต่อเป็นเนื้อเดียวกัน ไม่มีปัญหารั่วซึม</p>
|
||||
<h3 id="5-ประหยัดพลังงาน">5. ประหยัดพลังงาน</h3>
|
||||
<p>ท่อ PPR เป็นฉนวนกันความร้อนที่ดี ช่วยรักษาอุณหภูมิของน้ำได้ดีกว่าท่อโลหะ</p>
|
||||
<h2 id="การเลือกท่อ-ppr-ที่เหมาะสม">การเลือกท่อ PPR ที่เหมาะสม</h2>
|
||||
<h3 id="ขนาดท่อ">ขนาดท่อ</h3>
|
||||
<p>เลือกขนาดท่อให้เหมาะสมกับปริมาณน้ำที่ต้องการใช้งาน:</p>
|
||||
<ul>
|
||||
<li>ท่อขนาด 20-25 มม. เหมาะสำหรับบ้านเรือนทั่วไป</li>
|
||||
<li>ท่อขนาด 32-63 มม. เหมาะสำหรับอาคารขนาดใหญ่</li>
|
||||
</ul>
|
||||
<h3 id="เกรดของท่อ">เกรดของท่อ</h3>
|
||||
<ul>
|
||||
<li><strong>PN10</strong> - สำหรับน้ำเย็น ทนแรงดัน 10 บาร์</li>
|
||||
<li><strong>PN16</strong> - สำหรับน้ำอุ่น ทนแรงดัน 16 บาร์</li>
|
||||
<li><strong>PN20</strong> - สำหรับน้ำร้อน ทนแรงดัน 20 บาร์</li>
|
||||
</ul>
|
||||
<h2 id="การติดตั้งท่อ-ppr">การติดตั้งท่อ PPR</h2>
|
||||
<h3 id="ขั้นตอนการเชื่อมท่อ">ขั้นตอนการเชื่อมท่อ</h3>
|
||||
<ol>
|
||||
<li>ตัดท่อให้ตรงและเรียบ</li>
|
||||
<li>ทำความสะอาดผิวท่อและข้อต่อ</li>
|
||||
<li>ใช้เครื่องเชื่อมท่ออุณหภูมิ 260°C</li>
|
||||
<li>สอดท่อและข้อต่อเข้าด้วยกัน</li>
|
||||
<li>รอให้เย็นตัวลงประมาณ 2-3 นาที</li>
|
||||
</ol>
|
||||
<h3 id="ข้อควรระวัง">ข้อควรระวัง</h3>
|
||||
<ul>
|
||||
<li>หลีกเลี่ยงการติดตั้งในพื้นที่ที่มีแสงแดดโดยตรง</li>
|
||||
<li>ควรทิ้งระยะห่างสำหรับการขยายตัวของท่อ</li>
|
||||
<li>ตรวจสอบความร้อนของเครื่องเชื่อมก่อนใช้งาน</li>
|
||||
</ul>
|
||||
<h2 id="ท่อ-ppr-ตราช้าง">ท่อ PPR ตราช้าง</h2>
|
||||
<p>ท่อ PPR ตราช้าง เป็นท่อ PPR คุณภาพสูงที่ผลิตจากเม็ดพลาสติก PP-R 80 วัตถุดิบคุณภาพสูงมาตรฐานยุโรปจาก lyondellbasell</p>
|
||||
<p><strong>คุณสมบัติเด่น:</strong></p>
|
||||
<ul>
|
||||
<li>ทนแรงดันได้สูงสุด 20 บาร์</li>
|
||||
<li>ทนต่ออุณหภูมิได้สูงถึง 95°C</li>
|
||||
<li>ผลิตตามมาตรฐาน DIN8077 และ DIN8078 ของประเทศเยอรมัน</li>
|
||||
<li>รับประกันคุณภาพ</li>
|
||||
</ul>
|
||||
<h2 id="สรุป">สรุป</h2>
|
||||
<p>ท่อ PPR เป็นตัวเลือกที่ดีสำหรับระบบประปาในปัจจุบัน เนื่องจากมีความทนทานสูง ติดตั้งง่าย และมีอายุการใช้งานยาวนาน หากคุณกำลังมองหาท่อสำหรับงานระบบน้ำ ท่อ PPR เป็นตัวเลือกที่คุ้มค่าและเหมาะสม</p>
|
||||
<hr>
|
||||
<p><strong>สนใจสินค้าท่อ PPR?</strong>
|
||||
ติดต่อเราได้ที่:</p>
|
||||
<ul>
|
||||
<li>โทร: 090-555-1415</li>
|
||||
<li>LINE: jppselection</li>
|
||||
<li>อีเมล: <a href="mailto:dealplustech@gmail.com">dealplustech@gmail.com</a></li>
|
||||
</ul>
|
||||
<p><a href="/%E0%B8%97%E0%B9%88%E0%B8%AD%E0%B8%9E%E0%B8%B5%E0%B8%9E%E0%B8%B5%E0%B8%AD%E0%B8%B2%E0%B8%A3%E0%B9%8C%E0%B8%95%E0%B8%A3%E0%B8%B2%E0%B8%8A%E0%B9%89%E0%B8%B2%E0%B8%87">ดูสินค้าท่อ PPR ทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
|
||||
กลับสู่หน้าบทความ
|
||||
</a> </div> </article> </main> </body></html>
|
||||
156
dealplustech-astro/dist/blog/บำรุงรักษาปั๊มน้ำ.md/index.html
vendored
Normal file
156
dealplustech-astro/dist/blog/บำรุงรักษาปั๊มน้ำ.md/index.html
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
<!DOCTYPE html><html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v5.18.0"><meta name="description" content="ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" href="/favicon.ico" sizes="any"><link rel="apple-touch-icon" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title" content="การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน"><meta property="og:description" content="ปั๊มน้ำเป็นอุปกรณ์สำคัญในระบบน้ำทุกบ้าน การบำรุงรักษาที่ถูกต้องจะช่วยยืดอายุการใช้งานและประหยัดค่าไฟฟ้า"><meta property="og:image" content="/og-image.jpg"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน | ดีล พลัส เทค</title><style>html{font-family:Kanit,system-ui,sans-serif}
|
||||
</style></head> <body class="flex flex-col min-h-screen"> <main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">ปั๊มน้ำ</span> <time class="text-secondary-500"> 5 มกราคม 2567 </time> <span class="text-secondary-500">•</span> <span class="text-secondary-500">Deal Plus Tech</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img src="/images/2021/02/Water-Pump1.jpg" alt="การบำรุงรักษาปั๊มน้ำให้มีอายุการใช้งานยาวนาน" class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> <h2 id="ความสำคัญของการบำรุงรักษาปั๊มน้ำ">ความสำคัญของการบำรุงรักษาปั๊มน้ำ</h2>
|
||||
<p>ปั๊มน้ำเป็นหัวใจของระบบน้ำในบ้าน การบำรุงรักษาอย่างสม่ำเสมอจะช่วย:</p>
|
||||
<ul>
|
||||
<li>ยืดอายุการใช้งานของปั๊มน้ำ</li>
|
||||
<li>ลดปัญหาการเสีย</li>
|
||||
<li>ประหยัดค่าไฟฟ้า</li>
|
||||
<li>ป้องกันอุบัติเหตุจากการรั่วซึม</li>
|
||||
</ul>
|
||||
<h2 id="การบำรุงรักษาปั๊มน้ำแบบทำเอง">การบำรุงรักษาปั๊มน้ำแบบทำเอง</h2>
|
||||
<h3 id="1-ตรวจสอบสายไฟและสวิตช์">1. ตรวจสอบสายไฟและสวิตช์</h3>
|
||||
<ul>
|
||||
<li>ตรวจสอบสายไฟว่ามีรอยชำรุดหรือไม่</li>
|
||||
<li>ตรวจสอบสวิตช์ว่าทำงานปกติหรือไม่</li>
|
||||
<li>หากพบความผิดปกติควรเรียกช่าง</li>
|
||||
</ul>
|
||||
<h3 id="2-ทำความสะอาดตัวกรอง">2. ทำความสะอาดตัวกรอง</h3>
|
||||
<ul>
|
||||
<li>ปิดวาล์วน้ำเข้าก่อนทำความสะอาด</li>
|
||||
<li>ถอดตัวกรองออกมาล้าง</li>
|
||||
<li>ตรวจสอบว่ามีสิ่งปนเปื้อนหรือไม่</li>
|
||||
<li>ติดตั้งกลับเข้าที่เดิม</li>
|
||||
</ul>
|
||||
<h3 id="3-ตรวจสอบแรงดันน้ำ">3. ตรวจสอบแรงดันน้ำ</h3>
|
||||
<ul>
|
||||
<li>สังเกตแรงดันน้ำว่าลดลงหรือไม่</li>
|
||||
<li>ตรวจสอบว่ามีเสียงผิดปกติหรือไม่</li>
|
||||
<li>หากแรงดันลดลงอาจมีการรั่วซึม</li>
|
||||
</ul>
|
||||
<h3 id="4-ตรวจสอบถังแรงดัน-pressure-tank">4. ตรวจสอบถังแรงดัน (Pressure Tank)</h3>
|
||||
<ul>
|
||||
<li>ตรวจสอบว่าถังมีอากาศเพียงพอหรือไม่</li>
|
||||
<li>หากปั๊มเปิด-ปิดบ่อยผิดปกติ อาจต้องเติมอากาศ</li>
|
||||
<li>ควรตรวจสอบทุก 6 เดือน</li>
|
||||
</ul>
|
||||
<h2 id="ปัญหาที่พบบ่อยและวิธีแก้ไข">ปัญหาที่พบบ่อยและวิธีแก้ไข</h2>
|
||||
<h3 id="ปั๊มไม่ทำงาน">ปั๊มไม่ทำงาน</h3>
|
||||
<p><strong>สาเหตุ:</strong></p>
|
||||
<ul>
|
||||
<li>ไฟดับหรือสายไฟขาด</li>
|
||||
<li>สวิตช์เสีย</li>
|
||||
<li>มอเตอร์เสีย</li>
|
||||
</ul>
|
||||
<p><strong>วิธีแก้:</strong></p>
|
||||
<ul>
|
||||
<li>ตรวจสอบไฟและสายไฟ</li>
|
||||
<li>เปลี่ยนสวิตช์</li>
|
||||
<li>เรียกช่างซ่อมมอเตอร์</li>
|
||||
</ul>
|
||||
<h3 id="แรงดันน้ำต่ำ">แรงดันน้ำต่ำ</h3>
|
||||
<p><strong>สาเหตุ:</strong></p>
|
||||
<ul>
|
||||
<li>ตัวกรองอุดตัน</li>
|
||||
<li>ท่อรั่ว</li>
|
||||
<li>ใบพัดสึกหรอ</li>
|
||||
</ul>
|
||||
<p><strong>วิธีแก้:</strong></p>
|
||||
<ul>
|
||||
<li>ทำความสะอาดตัวกรอง</li>
|
||||
<li>ตรวจสอบและซ่อมท่อ</li>
|
||||
<li>เปลี่ยนใบพัด</li>
|
||||
</ul>
|
||||
<h3 id="ปั๊มเปิด-ปิดบ่อย">ปั๊มเปิด-ปิดบ่อย</h3>
|
||||
<p><strong>สาเหตุ:</strong></p>
|
||||
<ul>
|
||||
<li>ถังแรงดันอากาศรั่ว</li>
|
||||
<li>แผ่นไดอะแฟรมแตก</li>
|
||||
<li>วาล์วตรวจสอบแรงดันเสีย</li>
|
||||
</ul>
|
||||
<p><strong>วิธีแก้:</strong></p>
|
||||
<ul>
|
||||
<li>เติมอากาศในถัง</li>
|
||||
<li>เปลี่ยนแผ่นไดอะแฟรม</li>
|
||||
<li>เปลี่ยนวาล์ว</li>
|
||||
</ul>
|
||||
<h3 id="ปั๊มมีเสียงดังผิดปกติ">ปั๊มมีเสียงดังผิดปกติ</h3>
|
||||
<p><strong>สาเหตุ:</strong></p>
|
||||
<ul>
|
||||
<li>ลูกปืนเสีย</li>
|
||||
<li>ใบพัดชำรุด</li>
|
||||
<li>การติดตั้งไม่แน่นหนา</li>
|
||||
</ul>
|
||||
<p><strong>วิธีแก้:</strong></p>
|
||||
<ul>
|
||||
<li>เปลี่ยนลูกปืน</li>
|
||||
<li>เปลี่ยนใบพัด</li>
|
||||
<li>ตรวจสอบการยึดแน่น</li>
|
||||
</ul>
|
||||
<h2 id="ตารางการบำรุงรักษา">ตารางการบำรุงรักษา</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<table><thead><tr><th>รายการ</th><th>ความถี่</th><th>หมายเหตุ</th></tr></thead><tbody><tr><td>ตรวจสอบสายไฟ</td><td>ทุกเดือน</td><td>มองหารอยชำรุด</td></tr><tr><td>ทำความสะอาดตัวกรอง</td><td>ทุก 3 เดือน</td><td>หรือเมื่อแรงดันลด</td></tr><tr><td>ตรวจสอบถังแรงดัน</td><td>ทุก 6 เดือน</td><td>เติมอากาศหากจำเป็น</td></tr><tr><td>ตรวจสอบสวิตช์</td><td>ทุกปี</td><td>เปลี่ยนหากเสีย</td></tr><tr><td>ตรวจสอบใบพัด</td><td>ทุก 2 ปี</td><td>โดยช่างผู้เชี่ยวชาญ</td></tr></tbody></table>
|
||||
<h2 id="เคล็ดลับการใช้งานปั๊มน้ำ">เคล็ดลับการใช้งานปั๊มน้ำ</h2>
|
||||
<h3 id="ประหยัดไฟฟ้า">ประหยัดไฟฟ้า</h3>
|
||||
<ul>
|
||||
<li>เลือกขนาดปั๊มที่เหมาะสมกับการใช้งาน</li>
|
||||
<li>ติดตั้งถังแรงดันขนาดเหมาะสม</li>
|
||||
<li>หลีกเลี่ยงการเปิด-ปิดปั๊มบ่อย</li>
|
||||
</ul>
|
||||
<h3 id="ป้องกันปัญหา">ป้องกันปัญหา</h3>
|
||||
<ul>
|
||||
<li>อย่าให้ปั๊มแห้ง (ทำงานโดยไม่มีน้ำ)</li>
|
||||
<li>ตรวจสอบรอยรั่วอย่างสม่ำเสมอ</li>
|
||||
<li>ใช้ตัวกรองเพื่อป้องกันสิ่งสกปรก</li>
|
||||
</ul>
|
||||
<h3 id="เมื่อต้องเปลี่ยนปั๊ม">เมื่อต้องเปลี่ยนปั๊ม</h3>
|
||||
<ul>
|
||||
<li>เลือกปั๊มที่มีคุณภาพ</li>
|
||||
<li>พิจารณาขนาดและกำลังที่เหมาะสม</li>
|
||||
<li>ติดตั้งโดยช่างผู้เชี่ยวชาญ</li>
|
||||
</ul>
|
||||
<h2 id="สรุป">สรุป</h2>
|
||||
<p>การบำรุงรักษาปั๊มน้ำอย่างสม่ำเสมอจะช่วยยืดอายุการใช้งาน ลดปัญหาการเสีย และประหยัดค่าใช้จ่ายในระยะยาว ควรตรวจสอบและบำรุงรักษาตามตารางที่กำหนด และหากพบปัญหาที่ไม่สามารถแก้ไขได้เอง ควรติดต่อช่างผู้เชี่ยวชาญ</p>
|
||||
<hr>
|
||||
<p><strong>ต้องการซื้อปั๊มน้ำหรืออุปกรณ์เสริม?</strong>
|
||||
ติดต่อเราได้ที่:</p>
|
||||
<ul>
|
||||
<li>โทร: 090-555-1415</li>
|
||||
<li>LINE: jppselection</li>
|
||||
</ul>
|
||||
<p><a href="/%E0%B8%9B%E0%B8%B1%E0%B9%8A%E0%B8%A1%E0%B8%99%E0%B9%89%E0%B8%B3-pump">ดูสินค้าปั๊มน้ำทั้งหมด</a></p> </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
|
||||
กลับสู่หน้าบทความ
|
||||
</a> </div> </article> </main> </body></html>
|
||||
14
dealplustech-astro/dist/chunks/BaseLayout_CQrO8n43.mjs
vendored
Normal file
14
dealplustech-astro/dist/chunks/BaseLayout_CQrO8n43.mjs
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
import { c as createComponent, d as addAttribute, h as renderHead, i as renderSlot, a as renderTemplate, b as createAstro } from './astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import 'clsx';
|
||||
/* empty css */
|
||||
|
||||
const $$Astro = createAstro();
|
||||
const $$BaseLayout = createComponent(($$result, $$props, $$slots) => {
|
||||
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
|
||||
Astro2.self = $$BaseLayout;
|
||||
const { title, description, image } = Astro2.props;
|
||||
return renderTemplate`<html lang="th"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator"${addAttribute(Astro2.generator, "content")}><meta name="description"${addAttribute(description || "\u0E1A\u0E23\u0E34\u0E29\u0E31\u0E17 \u0E14\u0E35\u0E25 \u0E1E\u0E25\u0E31\u0E2A \u0E40\u0E17\u0E04 \u0E08\u0E33\u0E01\u0E31\u0E14 - \u0E1C\u0E39\u0E49\u0E40\u0E0A\u0E35\u0E48\u0E22\u0E27\u0E0A\u0E32\u0E0D\u0E14\u0E49\u0E32\u0E19\u0E23\u0E30\u0E1A\u0E1A\u0E19\u0E49\u0E33 \u0E17\u0E48\u0E2D PPR \u0E15\u0E23\u0E32\u0E0A\u0E49\u0E32\u0E07 \u0E17\u0E48\u0E2D\u0E1E\u0E35\u0E1E\u0E35\u0E2D\u0E32\u0E23\u0E4C \u0E17\u0E48\u0E2D HDPE", "content")}><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" href="/favicon.ico" sizes="any"><link rel="apple-touch-icon" href="/favicon.svg"><!-- Google Fonts: Kanit for Thai --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600;700&display=swap" rel="stylesheet"><!-- SEO --><meta property="og:title"${addAttribute(title, "content")}><meta property="og:description"${addAttribute(description || "Deal Plus Tech - \u0E1C\u0E39\u0E49\u0E40\u0E0A\u0E35\u0E48\u0E22\u0E27\u0E0A\u0E32\u0E0D\u0E14\u0E49\u0E32\u0E19\u0E23\u0E30\u0E1A\u0E1A\u0E19\u0E49\u0E33", "content")}><meta property="og:image"${addAttribute(image || "/og-image.jpg", "content")}><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><title>${title} | ดีล พลัส เทค</title>${renderHead()}</head> <body class="flex flex-col min-h-screen"> ${renderSlot($$result, $$slots["default"])} </body></html>`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/layouts/BaseLayout.astro", void 0);
|
||||
|
||||
export { $$BaseLayout as $ };
|
||||
1783
dealplustech-astro/dist/chunks/_astro_assets_CWrzoUoo.mjs
vendored
Normal file
1783
dealplustech-astro/dist/chunks/_astro_assets_CWrzoUoo.mjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
469
dealplustech-astro/dist/chunks/_astro_content_C5hvN5fw.mjs
vendored
Normal file
469
dealplustech-astro/dist/chunks/_astro_content_C5hvN5fw.mjs
vendored
Normal file
@@ -0,0 +1,469 @@
|
||||
import { escape } from 'html-escaper';
|
||||
import { Traverse } from 'neotraverse/modern';
|
||||
import pLimit from 'p-limit';
|
||||
import { z } from 'zod';
|
||||
import { removeBase, isRemotePath, prependForwardSlash } from '@astrojs/internal-helpers/path';
|
||||
import { A as AstroError, R as RenderUndefinedEntryError, c as createComponent, u as unescapeHTML, a as renderTemplate, U as UnknownContentCollectionError, e as renderUniqueStylesheet, f as renderScriptElement, g as createHeadAndContent, r as renderComponent } from './astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import * as devalue from 'devalue';
|
||||
|
||||
const CONTENT_IMAGE_FLAG = "astroContentImageFlag";
|
||||
const IMAGE_IMPORT_PREFIX = "__ASTRO_IMAGE_";
|
||||
|
||||
const VALID_INPUT_FORMATS = [
|
||||
"jpeg",
|
||||
"jpg",
|
||||
"png",
|
||||
"tiff",
|
||||
"webp",
|
||||
"gif",
|
||||
"svg",
|
||||
"avif"
|
||||
];
|
||||
const VALID_SUPPORTED_FORMATS = [
|
||||
"jpeg",
|
||||
"jpg",
|
||||
"png",
|
||||
"tiff",
|
||||
"webp",
|
||||
"gif",
|
||||
"svg",
|
||||
"avif"
|
||||
];
|
||||
const DEFAULT_OUTPUT_FORMAT = "webp";
|
||||
const DEFAULT_HASH_PROPS = [
|
||||
"src",
|
||||
"width",
|
||||
"height",
|
||||
"format",
|
||||
"quality",
|
||||
"fit",
|
||||
"position",
|
||||
"background"
|
||||
];
|
||||
|
||||
function imageSrcToImportId(imageSrc, filePath) {
|
||||
imageSrc = removeBase(imageSrc, IMAGE_IMPORT_PREFIX);
|
||||
if (isRemotePath(imageSrc)) {
|
||||
return;
|
||||
}
|
||||
const ext = imageSrc.split(".").at(-1)?.toLowerCase();
|
||||
if (!ext || !VALID_INPUT_FORMATS.includes(ext)) {
|
||||
return;
|
||||
}
|
||||
const params = new URLSearchParams(CONTENT_IMAGE_FLAG);
|
||||
if (filePath) {
|
||||
params.set("importer", filePath);
|
||||
}
|
||||
return `${imageSrc}?${params.toString()}`;
|
||||
}
|
||||
|
||||
class ImmutableDataStore {
|
||||
_collections = /* @__PURE__ */ new Map();
|
||||
constructor() {
|
||||
this._collections = /* @__PURE__ */ new Map();
|
||||
}
|
||||
get(collectionName, key) {
|
||||
return this._collections.get(collectionName)?.get(String(key));
|
||||
}
|
||||
entries(collectionName) {
|
||||
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||
return [...collection.entries()];
|
||||
}
|
||||
values(collectionName) {
|
||||
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||
return [...collection.values()];
|
||||
}
|
||||
keys(collectionName) {
|
||||
const collection = this._collections.get(collectionName) ?? /* @__PURE__ */ new Map();
|
||||
return [...collection.keys()];
|
||||
}
|
||||
has(collectionName, key) {
|
||||
const collection = this._collections.get(collectionName);
|
||||
if (collection) {
|
||||
return collection.has(String(key));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
hasCollection(collectionName) {
|
||||
return this._collections.has(collectionName);
|
||||
}
|
||||
collections() {
|
||||
return this._collections;
|
||||
}
|
||||
/**
|
||||
* Attempts to load a DataStore from the virtual module.
|
||||
* This only works in Vite.
|
||||
*/
|
||||
static async fromModule() {
|
||||
try {
|
||||
const data = await import('./_astro_data-layer-content_NX5tLOlp.mjs');
|
||||
if (data.default instanceof Map) {
|
||||
return ImmutableDataStore.fromMap(data.default);
|
||||
}
|
||||
const map = devalue.unflatten(data.default);
|
||||
return ImmutableDataStore.fromMap(map);
|
||||
} catch {
|
||||
}
|
||||
return new ImmutableDataStore();
|
||||
}
|
||||
static async fromMap(data) {
|
||||
const store = new ImmutableDataStore();
|
||||
store._collections = data;
|
||||
return store;
|
||||
}
|
||||
}
|
||||
function dataStoreSingleton() {
|
||||
let instance = void 0;
|
||||
return {
|
||||
get: async () => {
|
||||
if (!instance) {
|
||||
instance = ImmutableDataStore.fromModule();
|
||||
}
|
||||
return instance;
|
||||
},
|
||||
set: (store) => {
|
||||
instance = store;
|
||||
}
|
||||
};
|
||||
}
|
||||
const globalDataStore = dataStoreSingleton();
|
||||
|
||||
const __vite_import_meta_env__ = {"ASSETS_PREFIX": undefined, "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SITE": undefined, "SSR": true};
|
||||
function createCollectionToGlobResultMap({
|
||||
globResult,
|
||||
contentDir
|
||||
}) {
|
||||
const collectionToGlobResultMap = {};
|
||||
for (const key in globResult) {
|
||||
const keyRelativeToContentDir = key.replace(new RegExp(`^${contentDir}`), "");
|
||||
const segments = keyRelativeToContentDir.split("/");
|
||||
if (segments.length <= 1) continue;
|
||||
const collection = segments[0];
|
||||
collectionToGlobResultMap[collection] ??= {};
|
||||
collectionToGlobResultMap[collection][key] = globResult[key];
|
||||
}
|
||||
return collectionToGlobResultMap;
|
||||
}
|
||||
z.object({
|
||||
tags: z.array(z.string()).optional(),
|
||||
lastModified: z.date().optional()
|
||||
});
|
||||
function createGetCollection({
|
||||
contentCollectionToEntryMap,
|
||||
dataCollectionToEntryMap,
|
||||
getRenderEntryImport,
|
||||
cacheEntriesByCollection,
|
||||
liveCollections
|
||||
}) {
|
||||
return async function getCollection(collection, filter) {
|
||||
if (collection in liveCollections) {
|
||||
throw new AstroError({
|
||||
...UnknownContentCollectionError,
|
||||
message: `Collection "${collection}" is a live collection. Use getLiveCollection() instead of getCollection().`
|
||||
});
|
||||
}
|
||||
const hasFilter = typeof filter === "function";
|
||||
const store = await globalDataStore.get();
|
||||
let type;
|
||||
if (collection in contentCollectionToEntryMap) {
|
||||
type = "content";
|
||||
} else if (collection in dataCollectionToEntryMap) {
|
||||
type = "data";
|
||||
} else if (store.hasCollection(collection)) {
|
||||
const { default: imageAssetMap } = await import('./content-assets_DleWbedO.mjs');
|
||||
const result = [];
|
||||
for (const rawEntry of store.values(collection)) {
|
||||
const data = updateImageReferencesInData(rawEntry.data, rawEntry.filePath, imageAssetMap);
|
||||
let entry = {
|
||||
...rawEntry,
|
||||
data,
|
||||
collection
|
||||
};
|
||||
if (entry.legacyId) {
|
||||
entry = emulateLegacyEntry(entry);
|
||||
}
|
||||
if (hasFilter && !filter(entry)) {
|
||||
continue;
|
||||
}
|
||||
result.push(entry);
|
||||
}
|
||||
return result;
|
||||
} else {
|
||||
console.warn(
|
||||
`The collection ${JSON.stringify(
|
||||
collection
|
||||
)} does not exist or is empty. Please check your content config file for errors.`
|
||||
);
|
||||
return [];
|
||||
}
|
||||
const lazyImports = Object.values(
|
||||
type === "content" ? contentCollectionToEntryMap[collection] : dataCollectionToEntryMap[collection]
|
||||
);
|
||||
let entries = [];
|
||||
if (!Object.assign(__vite_import_meta_env__, { _: process.env._ })?.DEV && cacheEntriesByCollection.has(collection)) {
|
||||
entries = cacheEntriesByCollection.get(collection);
|
||||
} else {
|
||||
const limit = pLimit(10);
|
||||
entries = await Promise.all(
|
||||
lazyImports.map(
|
||||
(lazyImport) => limit(async () => {
|
||||
const entry = await lazyImport();
|
||||
return type === "content" ? {
|
||||
id: entry.id,
|
||||
slug: entry.slug,
|
||||
body: entry.body,
|
||||
collection: entry.collection,
|
||||
data: entry.data,
|
||||
async render() {
|
||||
return render({
|
||||
collection: entry.collection,
|
||||
id: entry.id,
|
||||
renderEntryImport: await getRenderEntryImport(collection, entry.slug)
|
||||
});
|
||||
}
|
||||
} : {
|
||||
id: entry.id,
|
||||
collection: entry.collection,
|
||||
data: entry.data
|
||||
};
|
||||
})
|
||||
)
|
||||
);
|
||||
cacheEntriesByCollection.set(collection, entries);
|
||||
}
|
||||
if (hasFilter) {
|
||||
return entries.filter(filter);
|
||||
} else {
|
||||
return entries.slice();
|
||||
}
|
||||
};
|
||||
}
|
||||
function emulateLegacyEntry({ legacyId, ...entry }) {
|
||||
const legacyEntry = {
|
||||
...entry,
|
||||
id: legacyId,
|
||||
slug: entry.id
|
||||
};
|
||||
return {
|
||||
...legacyEntry,
|
||||
// Define separately so the render function isn't included in the object passed to `renderEntry()`
|
||||
render: () => renderEntry(legacyEntry)
|
||||
};
|
||||
}
|
||||
const CONTENT_LAYER_IMAGE_REGEX = /__ASTRO_IMAGE_="([^"]+)"/g;
|
||||
async function updateImageReferencesInBody(html, fileName) {
|
||||
const { default: imageAssetMap } = await import('./content-assets_DleWbedO.mjs');
|
||||
const imageObjects = /* @__PURE__ */ new Map();
|
||||
const { getImage } = await import('./_astro_assets_CWrzoUoo.mjs').then(n => n._);
|
||||
for (const [_full, imagePath] of html.matchAll(CONTENT_LAYER_IMAGE_REGEX)) {
|
||||
try {
|
||||
const decodedImagePath = JSON.parse(imagePath.replaceAll(""", '"'));
|
||||
let image;
|
||||
if (URL.canParse(decodedImagePath.src)) {
|
||||
image = await getImage(decodedImagePath);
|
||||
} else {
|
||||
const id = imageSrcToImportId(decodedImagePath.src, fileName);
|
||||
const imported = imageAssetMap.get(id);
|
||||
if (!id || imageObjects.has(id) || !imported) {
|
||||
continue;
|
||||
}
|
||||
image = await getImage({ ...decodedImagePath, src: imported });
|
||||
}
|
||||
imageObjects.set(imagePath, image);
|
||||
} catch {
|
||||
throw new Error(`Failed to parse image reference: ${imagePath}`);
|
||||
}
|
||||
}
|
||||
return html.replaceAll(CONTENT_LAYER_IMAGE_REGEX, (full, imagePath) => {
|
||||
const image = imageObjects.get(imagePath);
|
||||
if (!image) {
|
||||
return full;
|
||||
}
|
||||
const { index, ...attributes } = image.attributes;
|
||||
return Object.entries({
|
||||
...attributes,
|
||||
src: image.src,
|
||||
srcset: image.srcSet.attribute,
|
||||
// This attribute is used by the toolbar audit
|
||||
...Object.assign(__vite_import_meta_env__, { _: process.env._ }).DEV ? { "data-image-component": "true" } : {}
|
||||
}).map(([key, value]) => value ? `${key}="${escape(value)}"` : "").join(" ");
|
||||
});
|
||||
}
|
||||
function updateImageReferencesInData(data, fileName, imageAssetMap) {
|
||||
return new Traverse(data).map(function(ctx, val) {
|
||||
if (typeof val === "string" && val.startsWith(IMAGE_IMPORT_PREFIX)) {
|
||||
const src = val.replace(IMAGE_IMPORT_PREFIX, "");
|
||||
const id = imageSrcToImportId(src, fileName);
|
||||
if (!id) {
|
||||
ctx.update(src);
|
||||
return;
|
||||
}
|
||||
const imported = imageAssetMap?.get(id);
|
||||
if (imported) {
|
||||
ctx.update(imported);
|
||||
} else {
|
||||
ctx.update(src);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
async function renderEntry(entry) {
|
||||
if (!entry) {
|
||||
throw new AstroError(RenderUndefinedEntryError);
|
||||
}
|
||||
if ("render" in entry && !("legacyId" in entry)) {
|
||||
return entry.render();
|
||||
}
|
||||
if (entry.deferredRender) {
|
||||
try {
|
||||
const { default: contentModules } = await import('./content-modules_Dz-S_Wwv.mjs');
|
||||
const renderEntryImport = contentModules.get(entry.filePath);
|
||||
return render({
|
||||
collection: "",
|
||||
id: entry.id,
|
||||
renderEntryImport
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
const html = entry?.rendered?.metadata?.imagePaths?.length && entry.filePath ? await updateImageReferencesInBody(entry.rendered.html, entry.filePath) : entry?.rendered?.html;
|
||||
const Content = createComponent(() => renderTemplate`${unescapeHTML(html)}`);
|
||||
return {
|
||||
Content,
|
||||
headings: entry?.rendered?.metadata?.headings ?? [],
|
||||
remarkPluginFrontmatter: entry?.rendered?.metadata?.frontmatter ?? {}
|
||||
};
|
||||
}
|
||||
async function render({
|
||||
collection,
|
||||
id,
|
||||
renderEntryImport
|
||||
}) {
|
||||
const UnexpectedRenderError = new AstroError({
|
||||
...UnknownContentCollectionError,
|
||||
message: `Unexpected error while rendering ${String(collection)} → ${String(id)}.`
|
||||
});
|
||||
if (typeof renderEntryImport !== "function") throw UnexpectedRenderError;
|
||||
const baseMod = await renderEntryImport();
|
||||
if (baseMod == null || typeof baseMod !== "object") throw UnexpectedRenderError;
|
||||
const { default: defaultMod } = baseMod;
|
||||
if (isPropagatedAssetsModule(defaultMod)) {
|
||||
const { collectedStyles, collectedLinks, collectedScripts, getMod } = defaultMod;
|
||||
if (typeof getMod !== "function") throw UnexpectedRenderError;
|
||||
const propagationMod = await getMod();
|
||||
if (propagationMod == null || typeof propagationMod !== "object") throw UnexpectedRenderError;
|
||||
const Content = createComponent({
|
||||
factory(result, baseProps, slots) {
|
||||
let styles = "", links = "", scripts = "";
|
||||
if (Array.isArray(collectedStyles)) {
|
||||
styles = collectedStyles.map((style) => {
|
||||
return renderUniqueStylesheet(result, {
|
||||
type: "inline",
|
||||
content: style
|
||||
});
|
||||
}).join("");
|
||||
}
|
||||
if (Array.isArray(collectedLinks)) {
|
||||
links = collectedLinks.map((link) => {
|
||||
return renderUniqueStylesheet(result, {
|
||||
type: "external",
|
||||
src: isRemotePath(link) ? link : prependForwardSlash(link)
|
||||
});
|
||||
}).join("");
|
||||
}
|
||||
if (Array.isArray(collectedScripts)) {
|
||||
scripts = collectedScripts.map((script) => renderScriptElement(script)).join("");
|
||||
}
|
||||
let props = baseProps;
|
||||
if (id.endsWith("mdx")) {
|
||||
props = {
|
||||
components: propagationMod.components ?? {},
|
||||
...baseProps
|
||||
};
|
||||
}
|
||||
return createHeadAndContent(
|
||||
unescapeHTML(styles + links + scripts),
|
||||
renderTemplate`${renderComponent(
|
||||
result,
|
||||
"Content",
|
||||
propagationMod.Content,
|
||||
props,
|
||||
slots
|
||||
)}`
|
||||
);
|
||||
},
|
||||
propagation: "self"
|
||||
});
|
||||
return {
|
||||
Content,
|
||||
headings: propagationMod.getHeadings?.() ?? [],
|
||||
remarkPluginFrontmatter: propagationMod.frontmatter ?? {}
|
||||
};
|
||||
} else if (baseMod.Content && typeof baseMod.Content === "function") {
|
||||
return {
|
||||
Content: baseMod.Content,
|
||||
headings: baseMod.getHeadings?.() ?? [],
|
||||
remarkPluginFrontmatter: baseMod.frontmatter ?? {}
|
||||
};
|
||||
} else {
|
||||
throw UnexpectedRenderError;
|
||||
}
|
||||
}
|
||||
function isPropagatedAssetsModule(module) {
|
||||
return typeof module === "object" && module != null && "__astroPropagation" in module;
|
||||
}
|
||||
|
||||
// astro-head-inject
|
||||
|
||||
const liveCollections = {};
|
||||
|
||||
const contentDir = '/src/content/';
|
||||
|
||||
const contentEntryGlob = "";
|
||||
const contentCollectionToEntryMap = createCollectionToGlobResultMap({
|
||||
globResult: contentEntryGlob,
|
||||
contentDir,
|
||||
});
|
||||
|
||||
const dataEntryGlob = "";
|
||||
const dataCollectionToEntryMap = createCollectionToGlobResultMap({
|
||||
globResult: dataEntryGlob,
|
||||
contentDir,
|
||||
});
|
||||
createCollectionToGlobResultMap({
|
||||
globResult: { ...contentEntryGlob, ...dataEntryGlob },
|
||||
contentDir,
|
||||
});
|
||||
|
||||
let lookupMap = {};
|
||||
lookupMap = {};
|
||||
|
||||
new Set(Object.keys(lookupMap));
|
||||
|
||||
function createGlobLookup(glob) {
|
||||
return async (collection, lookupId) => {
|
||||
const filePath = lookupMap[collection]?.entries[lookupId];
|
||||
|
||||
if (!filePath) return undefined;
|
||||
return glob[collection][filePath];
|
||||
};
|
||||
}
|
||||
|
||||
const renderEntryGlob = "";
|
||||
const collectionToRenderEntryMap = createCollectionToGlobResultMap({
|
||||
globResult: renderEntryGlob,
|
||||
contentDir,
|
||||
});
|
||||
|
||||
const cacheEntriesByCollection = new Map();
|
||||
const getCollection = createGetCollection({
|
||||
contentCollectionToEntryMap,
|
||||
dataCollectionToEntryMap,
|
||||
getRenderEntryImport: createGlobLookup(collectionToRenderEntryMap),
|
||||
cacheEntriesByCollection,
|
||||
liveCollections,
|
||||
});
|
||||
|
||||
export { DEFAULT_OUTPUT_FORMAT as D, VALID_SUPPORTED_FORMATS as V, DEFAULT_HASH_PROPS as a, getCollection as g, renderEntry as r };
|
||||
3
dealplustech-astro/dist/chunks/_astro_data-layer-content_NX5tLOlp.mjs
vendored
Normal file
3
dealplustech-astro/dist/chunks/_astro_data-layer-content_NX5tLOlp.mjs
vendored
Normal file
File diff suppressed because one or more lines are too long
2058
dealplustech-astro/dist/chunks/astro/server_D-JZF3a4.mjs
vendored
Normal file
2058
dealplustech-astro/dist/chunks/astro/server_D-JZF3a4.mjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3
dealplustech-astro/dist/chunks/astro_CKoYlMnM.mjs
vendored
Normal file
3
dealplustech-astro/dist/chunks/astro_CKoYlMnM.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
import 'piccolore';
|
||||
import './astro/server_D-JZF3a4.mjs';
|
||||
import 'clsx';
|
||||
3
dealplustech-astro/dist/chunks/content-assets_DleWbedO.mjs
vendored
Normal file
3
dealplustech-astro/dist/chunks/content-assets_DleWbedO.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const contentAssets = new Map();
|
||||
|
||||
export { contentAssets as default };
|
||||
3
dealplustech-astro/dist/chunks/content-modules_Dz-S_Wwv.mjs
vendored
Normal file
3
dealplustech-astro/dist/chunks/content-modules_Dz-S_Wwv.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const contentModules = new Map();
|
||||
|
||||
export { contentModules as default };
|
||||
101
dealplustech-astro/dist/chunks/sharp_Dml_25Ys.mjs
vendored
Normal file
101
dealplustech-astro/dist/chunks/sharp_Dml_25Ys.mjs
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
import { A as AstroError, z as MissingSharp } from './astro/server_D-JZF3a4.mjs';
|
||||
import { b as baseService, p as parseQuality } from './_astro_assets_CWrzoUoo.mjs';
|
||||
|
||||
let sharp;
|
||||
const qualityTable = {
|
||||
low: 25,
|
||||
mid: 50,
|
||||
high: 80,
|
||||
max: 100
|
||||
};
|
||||
async function loadSharp() {
|
||||
let sharpImport;
|
||||
try {
|
||||
sharpImport = (await import('sharp')).default;
|
||||
} catch {
|
||||
throw new AstroError(MissingSharp);
|
||||
}
|
||||
sharpImport.cache(false);
|
||||
return sharpImport;
|
||||
}
|
||||
const fitMap = {
|
||||
fill: "fill",
|
||||
contain: "inside",
|
||||
cover: "cover",
|
||||
none: "outside",
|
||||
"scale-down": "inside",
|
||||
outside: "outside",
|
||||
inside: "inside"
|
||||
};
|
||||
const sharpService = {
|
||||
validateOptions: baseService.validateOptions,
|
||||
getURL: baseService.getURL,
|
||||
parseURL: baseService.parseURL,
|
||||
getHTMLAttributes: baseService.getHTMLAttributes,
|
||||
getSrcSet: baseService.getSrcSet,
|
||||
async transform(inputBuffer, transformOptions, config) {
|
||||
if (!sharp) sharp = await loadSharp();
|
||||
const transform = transformOptions;
|
||||
const kernel = config.service.config.kernel;
|
||||
if (transform.format === "svg") return { data: inputBuffer, format: "svg" };
|
||||
const result = sharp(inputBuffer, {
|
||||
failOnError: false,
|
||||
pages: -1,
|
||||
limitInputPixels: config.service.config.limitInputPixels
|
||||
});
|
||||
result.rotate();
|
||||
const { format } = await result.metadata();
|
||||
const withoutEnlargement = Boolean(transform.fit);
|
||||
if (transform.width && transform.height && transform.fit) {
|
||||
const fit = fitMap[transform.fit] ?? "inside";
|
||||
result.resize({
|
||||
width: Math.round(transform.width),
|
||||
height: Math.round(transform.height),
|
||||
kernel,
|
||||
fit,
|
||||
position: transform.position,
|
||||
withoutEnlargement
|
||||
});
|
||||
} else if (transform.height && !transform.width) {
|
||||
result.resize({
|
||||
height: Math.round(transform.height),
|
||||
kernel,
|
||||
withoutEnlargement
|
||||
});
|
||||
} else if (transform.width) {
|
||||
result.resize({
|
||||
width: Math.round(transform.width),
|
||||
kernel,
|
||||
withoutEnlargement
|
||||
});
|
||||
}
|
||||
if (transform.background) {
|
||||
result.flatten({ background: transform.background });
|
||||
}
|
||||
if (transform.format) {
|
||||
let quality = void 0;
|
||||
if (transform.quality) {
|
||||
const parsedQuality = parseQuality(transform.quality);
|
||||
if (typeof parsedQuality === "number") {
|
||||
quality = parsedQuality;
|
||||
} else {
|
||||
quality = transform.quality in qualityTable ? qualityTable[transform.quality] : void 0;
|
||||
}
|
||||
}
|
||||
if (transform.format === "webp" && format === "gif") {
|
||||
result.webp({ quality: typeof quality === "number" ? quality : void 0, loop: 0 });
|
||||
} else {
|
||||
result.toFormat(transform.format, { quality });
|
||||
}
|
||||
}
|
||||
const { data, info } = await result.toBuffer({ resolveWithObject: true });
|
||||
const needsCopy = "buffer" in data && data.buffer instanceof SharedArrayBuffer;
|
||||
return {
|
||||
data: needsCopy ? new Uint8Array(data) : data,
|
||||
format: info.format
|
||||
};
|
||||
}
|
||||
};
|
||||
var sharp_default = sharpService;
|
||||
|
||||
export { sharp_default as default };
|
||||
1806
dealplustech-astro/dist/chunks/site-config_BJHCdssj.mjs
vendored
Normal file
1806
dealplustech-astro/dist/chunks/site-config_BJHCdssj.mjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
36
dealplustech-astro/dist/index.html
vendored
36
dealplustech-astro/dist/index.html
vendored
File diff suppressed because one or more lines are too long
157
dealplustech-astro/dist/manifest_bX0VrZBn.mjs
vendored
Normal file
157
dealplustech-astro/dist/manifest_bX0VrZBn.mjs
vendored
Normal file
File diff suppressed because one or more lines are too long
3
dealplustech-astro/dist/noop-entrypoint.mjs
vendored
Normal file
3
dealplustech-astro/dist/noop-entrypoint.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const server = {};
|
||||
|
||||
export { server };
|
||||
46
dealplustech-astro/dist/pages/blog.astro.mjs
vendored
Normal file
46
dealplustech-astro/dist/pages/blog.astro.mjs
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
import { c as createComponent, m as maybeRenderHead, d as addAttribute, a as renderTemplate, b as createAstro, r as renderComponent } from '../chunks/astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import { g as getCollection } from '../chunks/_astro_content_C5hvN5fw.mjs';
|
||||
import 'clsx';
|
||||
import { $ as $$BaseLayout } from '../chunks/BaseLayout_CQrO8n43.mjs';
|
||||
export { renderers } from '../renderers.mjs';
|
||||
|
||||
const $$Astro = createAstro();
|
||||
const $$BlogCard = createComponent(($$result, $$props, $$slots) => {
|
||||
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
|
||||
Astro2.self = $$BlogCard;
|
||||
const { post } = Astro2.props;
|
||||
const { title, excerpt, date, author, category, categories, image, featuredImage } = post.data;
|
||||
const postCategory = category || (Array.isArray(categories) ? categories[0] : "\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B");
|
||||
const postImage = image || featuredImage || "/images/2021/03/ppr-pipe_000C.jpg";
|
||||
return renderTemplate`${maybeRenderHead()}<a${addAttribute(`/blog/${post.slug}`, "href")} class="card group"> <div class="relative aspect-video bg-secondary-100 overflow-hidden"> <img${addAttribute(postImage, "src")}${addAttribute(title, "alt")} class="object-cover w-full h-48 group-hover:scale-105 transition-transform duration-300" loading="lazy"> <div class="absolute top-4 left-4"> <span class="industrial-badge">${postCategory}</span> </div> </div> <div class="p-6"> <time class="text-sm text-secondary-500"> ${new Date(date).toLocaleDateString("th-TH", { year: "numeric", month: "long", day: "numeric" })} </time> <h3 class="mt-2 text-xl font-bold text-secondary-900 group-hover:text-primary-600 transition-colors line-clamp-2"> ${title} </h3> ${excerpt && renderTemplate`<p class="mt-3 text-secondary-600 text-sm line-clamp-3"> ${excerpt} </p>`} <div class="mt-4 flex items-center text-primary-600 font-medium"> <span>อ่านต่อ</span> <svg class="w-4 h-4 ml-2 group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M9 5l7 7-7 7"></path> </svg> </div> </div> </a>`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/components/BlogCard.astro", void 0);
|
||||
|
||||
const metadata = {
|
||||
title: "\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",
|
||||
description: "\u0E1A\u0E17\u0E04\u0E27\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A\u0E27\u0E31\u0E2A\u0E14\u0E38\u0E17\u0E48\u0E2D \u0E2D\u0E38\u0E1B\u0E01\u0E23\u0E13\u0E4C\u0E23\u0E30\u0E1A\u0E1A\u0E17\u0E48\u0E2D \u0E41\u0E25\u0E30\u0E40\u0E17\u0E04\u0E19\u0E34\u0E04\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07"
|
||||
};
|
||||
const prerender = true;
|
||||
const $$Index = createComponent(async ($$result, $$props, $$slots) => {
|
||||
const posts = await getCollection("blog");
|
||||
return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, { "title": metadata.title, "description": metadata.description }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<main class="pt-32 pb-16"> <div class="container mx-auto px-4"> <!-- Hero --> <div class="text-center mb-12"> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4">
|
||||
บทความ<span class="text-primary-600">ความรู้</span> </h1> <p class="text-xl text-secondary-600 max-w-2xl mx-auto">
|
||||
บทความความรู้เกี่ยวกับวัสดุท่อ อุปกรณ์ระบบท่อ และเทคนิคการติดตั้ง
|
||||
</p> </div> <!-- Blog Grid --> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> ${posts.map((post) => renderTemplate`${renderComponent($$result2, "BlogCard", $$BlogCard, { "post": post })}`)} </div> </div> </main> ` })}`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/blog/index.astro", void 0);
|
||||
|
||||
const $$file = "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/blog/index.astro";
|
||||
const $$url = "/blog";
|
||||
|
||||
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: $$Index,
|
||||
file: $$file,
|
||||
metadata,
|
||||
prerender,
|
||||
url: $$url
|
||||
}, Symbol.toStringTag, { value: 'Module' }));
|
||||
|
||||
const page = () => _page;
|
||||
|
||||
export { page };
|
||||
45
dealplustech-astro/dist/pages/blog/_slug_.astro.mjs
vendored
Normal file
45
dealplustech-astro/dist/pages/blog/_slug_.astro.mjs
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import { c as createComponent, r as renderComponent, a as renderTemplate, b as createAstro, m as maybeRenderHead, d as addAttribute } from '../../chunks/astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import { r as renderEntry, g as getCollection } from '../../chunks/_astro_content_C5hvN5fw.mjs';
|
||||
import { $ as $$BaseLayout } from '../../chunks/BaseLayout_CQrO8n43.mjs';
|
||||
export { renderers } from '../../renderers.mjs';
|
||||
|
||||
const $$Astro = createAstro();
|
||||
async function getStaticPaths() {
|
||||
const posts = await getCollection("blog");
|
||||
return posts.map((post) => ({
|
||||
params: { slug: post.id },
|
||||
props: { post }
|
||||
}));
|
||||
}
|
||||
const $$slug = createComponent(async ($$result, $$props, $$slots) => {
|
||||
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
|
||||
Astro2.self = $$slug;
|
||||
const { post } = Astro2.props;
|
||||
const { Content } = await renderEntry(post);
|
||||
const { title, date, author, category, categories, image, featuredImage } = post.data;
|
||||
const postCategory = category || (Array.isArray(categories) ? categories[0] : "\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B");
|
||||
const postImage = image || featuredImage || "/images/2021/03/ppr-pipe_000C.jpg";
|
||||
return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, { "title": title, "description": post.data.excerpt }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<main class="pt-32 pb-16"> <article class="container mx-auto px-4 max-w-4xl"> <!-- Header --> <header class="mb-8"> <div class="flex items-center gap-4 mb-4"> <span class="industrial-badge">${postCategory}</span> <time class="text-secondary-500"> ${new Date(date).toLocaleDateString("th-TH", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric"
|
||||
})} </time> <span class="text-secondary-500">•</span> <span class="text-secondary-500">${author}</span> </div> <h1 class="text-4xl md:text-5xl font-bold text-secondary-900 mb-4"> ${title} </h1> </header> <!-- Featured Image --> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden mb-8"> <img${addAttribute(postImage, "src")}${addAttribute(title, "alt")} class="object-cover w-full h-full" loading="lazy"> </div> <!-- Content --> <div class="prose prose-lg max-w-none prose-headings:font-bold prose-a:text-primary-600 hover:prose-a:text-primary-700 prose-img:rounded-xl"> ${renderComponent($$result2, "Content", Content, {})} </div> <!-- Back to Blog --> <div class="mt-12 pt-8 border-t border-secondary-200"> <a href="/blog/" class="inline-flex items-center text-primary-600 font-medium hover:text-primary-700 transition-colors"> <svg class="w-5 h-5 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M10 19l-7-7m0 0l7-7m-7 7h18"></path> </svg>
|
||||
กลับสู่หน้าบทความ
|
||||
</a> </div> </article> </main> ` })}`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/blog/[slug].astro", void 0);
|
||||
|
||||
const $$file = "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/blog/[slug].astro";
|
||||
const $$url = "/blog/[slug]";
|
||||
|
||||
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: $$slug,
|
||||
file: $$file,
|
||||
getStaticPaths,
|
||||
url: $$url
|
||||
}, Symbol.toStringTag, { value: 'Module' }));
|
||||
|
||||
const page = () => _page;
|
||||
|
||||
export { page };
|
||||
65
dealplustech-astro/dist/pages/index.astro.mjs
vendored
Normal file
65
dealplustech-astro/dist/pages/index.astro.mjs
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
import { c as createComponent, m as maybeRenderHead, d as addAttribute, a as renderTemplate, r as renderComponent } from '../chunks/astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import { $ as $$BaseLayout } from '../chunks/BaseLayout_CQrO8n43.mjs';
|
||||
import 'clsx';
|
||||
import { s as siteConfig, p as productCategories } from '../chunks/site-config_BJHCdssj.mjs';
|
||||
export { renderers } from '../renderers.mjs';
|
||||
|
||||
const $$FloatingContact = createComponent(($$result, $$props, $$slots) => {
|
||||
return renderTemplate`${maybeRenderHead()}<div class="fixed bottom-6 right-6 z-40 flex flex-col gap-3"> <!-- LINE --> <a${addAttribute(`https://line.me/ti/p/${siteConfig.lineId}`, "href")} target="_blank" rel="noopener noreferrer" class="w-14 h-14 bg-[#00B900] rounded-full flex items-center justify-center shadow-lg hover:scale-110 transition-transform" aria-label="ติดต่อผ่าน LINE"> <svg class="w-7 h-7 text-white" viewBox="0 0 24 24" fill="currentColor"> <path d="M19.365 9.863c.349 0 .63.285.63.631 0 .345-.281.63-.63.63H17.61v1.125h1.755c.349 0 .63.283.63.63 0 .344-.281.629-.63.629h-2.386c-.345 0-.627-.285-.627-.629V8.108c0-.345.282-.63.63-.63h2.386c.346 0 .627.285.627.63 0 .349-.281.63-.63.63H17.61v1.125h1.755zm-3.855 3.016c0 .27-.174.51-.432.596-.064.021-.133.031-.199.031-.211 0-.391-.09-.51-.25l-2.443-3.317v2.94c0 .344-.279.629-.631.629-.346 0-.626-.285-.626-.629V8.108c0-.27.173-.51.43-.595.06-.023.136-.033.194-.033.195 0 .375.104.495.254l2.462 3.33V8.108c0-.345.282-.63.63-.63.345 0 .63.285.63.63v4.771zm-5.741 0c0 .344-.282.629-.631.629-.345 0-.627-.285-.627-.629V8.108c0-.345.282-.63.63-.63.346 0 .628.285.628.63v4.771zm-2.466.629H4.917c-.345 0-.63-.285-.63-.629V8.108c0-.345.285-.63.63-.63.348 0 .63.285.63.63v4.141h1.756c.348 0 .629.283.629.63 0 .344-.282.629-.629.629M24 10.314C24 4.943 18.615.572 12 .572S0 4.943 0 10.314c0 4.811 4.27 8.842 10.035 9.608.391.082.923.258 1.058.59.12.301.079.766.038 1.08l-.164 1.02c-.045.301-.24 1.186 1.049.645 1.291-.539 6.916-4.078 9.436-6.975C23.176 14.393 24 12.458 24 10.314"></path> </svg> </a> <!-- Phone --> <a${addAttribute(`tel:${siteConfig.phone}`, "href")} class="w-14 h-14 bg-primary-600 rounded-full flex items-center justify-center shadow-lg hover:scale-110 transition-transform" aria-label="โทรหาเรา"> <svg class="w-7 h-7 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path> </svg> </a> </div>`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/components/FloatingContact.astro", void 0);
|
||||
|
||||
const $$Index = createComponent(($$result, $$props, $$slots) => {
|
||||
const featuredProducts = productCategories.filter(
|
||||
(p) => ["ppr-elephant", "hdpe", "poloplast", "syler", "xylent"].includes(p.id)
|
||||
).slice(0, 6);
|
||||
return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, { "title": "\u0E2B\u0E19\u0E49\u0E32\u0E41\u0E23\u0E01", "description": "\u0E1A\u0E23\u0E34\u0E29\u0E31\u0E17 \u0E14\u0E35\u0E25 \u0E1E\u0E25\u0E31\u0E2A \u0E40\u0E17\u0E04 \u0E08\u0E33\u0E01\u0E31\u0E14 - \u0E1C\u0E39\u0E49\u0E40\u0E0A\u0E35\u0E48\u0E22\u0E27\u0E0A\u0E32\u0E0D\u0E14\u0E49\u0E32\u0E19\u0E23\u0E30\u0E1A\u0E1A\u0E17\u0E48\u0E2D\u0E41\u0E25\u0E30 HVAC" }, { "default": ($$result2) => renderTemplate` ${maybeRenderHead()}<main> <!-- Hero Section --> <section class="relative h-[70vh] min-h-[500px] bg-secondary-900"> <div class="absolute inset-0 bg-gradient-to-r from-secondary-900 via-secondary-900/90 to-secondary-900/60 z-10"></div> <img src="/images/2021/03/ppr-pipe_000C.jpg" alt="ท่อพีพีอาร์คุณภาพสูง" class="absolute inset-0 w-full h-full object-cover opacity-50" loading="eager"> <div class="relative z-20 container mx-auto px-4 h-full flex items-center"> <div class="max-w-2xl"> <span class="inline-block px-4 py-2 bg-primary-600 text-white font-semibold mb-4 rounded">
|
||||
ผู้เชี่ยวชาญด้านระบบท่อและ HVAC
|
||||
</span> <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 leading-tight">
|
||||
วัสดุท่อ อุปกรณ์ HVAC
|
||||
<span class="text-primary-400 block">และฉนวนหุ้มท่อ</span> </h1> <p class="text-lg md:text-xl text-secondary-200 mb-8">
|
||||
จำหน่ายและติดตั้งท่อ PPR, ท่อ HDPE, กริลแอร์, เทอร์โมเบรค และอุปกรณ์ระบบท่อครบวงจร พร้อมบริการให้คำปรึกษาจากทีมมืออาชีพ
|
||||
</p> <div class="flex flex-wrap gap-4"> <a href="/products/" class="btn-primary">
|
||||
ดูสินค้าทั้งหมด
|
||||
</a> <a href="/contact-us/" class="btn-outline border-white text-white hover:bg-white hover:text-secondary-900">
|
||||
ขอใบเสนอราคา
|
||||
</a> </div> </div> </div> </section> <!-- Features Section --> <section class="py-16 bg-secondary-800"> <div class="container mx-auto px-4"> <div class="grid grid-cols-1 md:grid-cols-3 gap-8"> <div class="text-center p-6"> <div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4"> <svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z"></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2">สินค้าคุณภาพ</h3> <p class="text-secondary-300">
|
||||
สินค้าทุกชิ้นผ่านมาตรฐานคุณภาพ พร้อมรับประกัน
|
||||
</p> </div> <div class="text-center p-6"> <div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4"> <svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M13 10V3L4 14h7v7l9-11h-7z"></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2">จัดส่งรวดเร็ว</h3> <p class="text-secondary-300">
|
||||
จัดส่งสินค้าทั่วประเทศ รวดเร็วและปลอดภัย
|
||||
</p> </div> <div class="text-center p-6"> <div class="w-16 h-16 bg-primary-600 rounded-lg flex items-center justify-center mx-auto mb-4"> <svg class="w-8 h-8 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z"></path> </svg> </div> <h3 class="text-xl font-bold text-white mb-2">บริการหลังการขาย</h3> <p class="text-secondary-300">
|
||||
ทีมงานพร้อมให้คำปรึกษาและดูแลอย่างต่อเนื่อง
|
||||
</p> </div> </div> </div> </section> <!-- Featured Products --> <section class="py-16 bg-secondary-50"> <div class="container mx-auto px-4"> <div class="text-center mb-12"> <h2 class="text-3xl md:text-4xl font-bold text-secondary-900 mb-4">
|
||||
สินค้า<span class="text-primary-600">เด่น</span> </h2> <p class="text-secondary-600 text-lg">ผลิตภัณฑ์คุณภาพสูงที่ได้รับความนิยม</p> </div> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> ${featuredProducts.map((product) => renderTemplate`<a${addAttribute(product.href, "href")} class="card group"> <div class="relative aspect-video bg-secondary-100 overflow-hidden"> <img${addAttribute(product.image, "src")}${addAttribute(product.name, "alt")} class="object-cover w-full h-48 group-hover:scale-105 transition-transform duration-300" loading="lazy"> </div> <div class="p-6"> <h3 class="text-lg font-bold text-secondary-900 group-hover:text-primary-600 transition-colors"> ${product.name} </h3> <p class="mt-2 text-sm text-secondary-600 line-clamp-2"> ${product.shortDescription || product.description} </p> <div class="mt-4 flex items-center text-primary-600 font-medium"> <span>ดูรายละเอียด</span> <svg class="w-4 h-4 ml-2 group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M9 5l7 7-7 7"></path> </svg> </div> </div> </a>`)} </div> <div class="text-center mt-12"> <a href="/products/" class="btn-primary">
|
||||
ดูสินค้าทั้งหมด
|
||||
</a> </div> </div> </section> <!-- About Preview --> <section class="py-16 bg-white"> <div class="container mx-auto px-4"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center"> <div> <h2 class="text-3xl md:text-4xl font-bold text-secondary-900 mb-6">
|
||||
เกี่ยวกับ<span class="text-primary-600">เรา</span> </h2> <p class="text-lg text-secondary-600 mb-6">
|
||||
บริษัท ดีล พลัส เทค จำกัด เราเป็นผู้เชียวชาญด้านระบบน้ำ ให้คำแนะนำและจำหน่ายท่อ PPR ตราช้าง ท่อพีพีอาร์ ท่อ PPR ท่อ HDPE Thai PPR คุณภาพสูง ราคาถูก
|
||||
</p> <p class="text-secondary-700 mb-8">
|
||||
ด้วยประสบการณ์ยาวนาน เราพร้อมให้บริการสินค้าคุณภาพและคำแนะนำจากผู้เชี่ยวชาญ เพื่อให้งานระบบของคุณมีประสิทธิภาพสูงสุด
|
||||
</p> <a href="/about-us/" class="btn-secondary">
|
||||
อ่านเพิ่มเติม
|
||||
</a> </div> <div class="relative aspect-video bg-secondary-100 rounded-xl overflow-hidden"> <img src="/images/2021/03/ppr-pipe_000C.jpg" alt="เกี่ยวกับดีลพลัสเทค" class="object-cover w-full h-full" loading="lazy"> </div> </div> </div> </section> <!-- CTA Section --> <section class="py-16 bg-primary-600"> <div class="container mx-auto px-4 text-center"> <h2 class="text-3xl md:text-4xl font-bold text-white mb-4">
|
||||
สนใจสินค้าหรือต้องการคำปรึกษา?
|
||||
</h2> <p class="text-xl text-primary-100 mb-8 max-w-2xl mx-auto">
|
||||
ทีมงานของเราพร้อมให้คำแนะนำและช่วยคุณเลือกสินค้าที่เหมาะสมที่สุด
|
||||
</p> <div class="flex flex-wrap justify-center gap-4"> <a href="tel:090-555-1415" class="btn-secondary bg-white text-primary-600 hover:bg-primary-50">
|
||||
โทร: 090-555-1415
|
||||
</a> <a href="https://line.me/ti/p/@dealplustech" target="_blank" rel="noopener" class="btn-outline border-white text-white hover:bg-white hover:text-primary-600">
|
||||
เพิ่มเพื่อน LINE
|
||||
</a> </div> </div> </section> </main> ${renderComponent($$result2, "FloatingContact", $$FloatingContact, {})} ` })}`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/index.astro", void 0);
|
||||
|
||||
const $$file = "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/index.astro";
|
||||
const $$url = "";
|
||||
|
||||
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: $$Index,
|
||||
file: $$file,
|
||||
url: $$url
|
||||
}, Symbol.toStringTag, { value: 'Module' }));
|
||||
|
||||
const page = () => _page;
|
||||
|
||||
export { page };
|
||||
34
dealplustech-astro/dist/pages/products.astro.mjs
vendored
Normal file
34
dealplustech-astro/dist/pages/products.astro.mjs
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
import { c as createComponent, m as maybeRenderHead, d as addAttribute, a as renderTemplate, b as createAstro, r as renderComponent } from '../chunks/astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import { g as getCollection } from '../chunks/_astro_content_C5hvN5fw.mjs';
|
||||
import 'clsx';
|
||||
import { $ as $$BaseLayout } from '../chunks/BaseLayout_CQrO8n43.mjs';
|
||||
export { renderers } from '../renderers.mjs';
|
||||
|
||||
const $$Astro = createAstro();
|
||||
const $$ProductCard = createComponent(($$result, $$props, $$slots) => {
|
||||
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
|
||||
Astro2.self = $$ProductCard;
|
||||
const { product } = Astro2.props;
|
||||
const { name, shortDescription, image } = product.data;
|
||||
return renderTemplate`${maybeRenderHead()}<a${addAttribute(`/products/${product.data.slug}`, "href")} class="card group"> <div class="aspect-w-16 aspect-h-9 overflow-hidden bg-secondary-100"> <img${addAttribute(image || "/placeholder.jpg", "src")}${addAttribute(name, "alt")} class="object-cover w-full h-48 group-hover:scale-105 transition-transform duration-300" loading="lazy"> </div> <div class="p-6"> <h3 class="text-lg font-bold text-secondary-900 group-hover:text-primary-600 transition-colors"> ${name} </h3> ${shortDescription && renderTemplate`<p class="mt-2 text-sm text-secondary-600 line-clamp-2"> ${shortDescription} </p>`} <div class="mt-4 flex items-center text-primary-600 font-medium"> <span>ดูรายละเอียด</span> <svg class="w-4 h-4 ml-2 group-hover:translate-x-1 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M9 5l7 7-7 7"></path> </svg> </div> </div> </a>`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/components/ProductCard.astro", void 0);
|
||||
|
||||
const $$Index = createComponent(async ($$result, $$props, $$slots) => {
|
||||
const products = await getCollection("products");
|
||||
return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, { "title": "\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14", "description": "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E08\u0E32\u0E01 Deal Plus Tech" }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<main class="py-12"> <div class="container mx-auto px-4 max-w-6xl"> <h1 class="section-title mb-8">สินค้าทั้งหมด</h1> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> ${products.map((product) => renderTemplate`${renderComponent($$result2, "ProductCard", $$ProductCard, { "product": product })}`)} </div> </div> </main> ` })}`;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/products/index.astro", void 0);
|
||||
|
||||
const $$file = "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/products/index.astro";
|
||||
const $$url = "/products";
|
||||
|
||||
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: $$Index,
|
||||
file: $$file,
|
||||
url: $$url
|
||||
}, Symbol.toStringTag, { value: 'Module' }));
|
||||
|
||||
const page = () => _page;
|
||||
|
||||
export { page };
|
||||
48
dealplustech-astro/dist/pages/products/_slug_.astro.mjs
vendored
Normal file
48
dealplustech-astro/dist/pages/products/_slug_.astro.mjs
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
import { c as createComponent, r as renderComponent, a as renderTemplate, b as createAstro, m as maybeRenderHead, d as addAttribute } from '../../chunks/astro/server_D-JZF3a4.mjs';
|
||||
import 'piccolore';
|
||||
import { r as renderEntry, g as getCollection } from '../../chunks/_astro_content_C5hvN5fw.mjs';
|
||||
import { $ as $$BaseLayout } from '../../chunks/BaseLayout_CQrO8n43.mjs';
|
||||
import { p as productCategories } from '../../chunks/site-config_BJHCdssj.mjs';
|
||||
/* empty css */
|
||||
export { renderers } from '../../renderers.mjs';
|
||||
|
||||
const $$Astro = createAstro();
|
||||
async function getStaticPaths() {
|
||||
const products = await getCollection("products");
|
||||
return products.map((product) => ({
|
||||
params: { slug: product.data.slug },
|
||||
props: { product }
|
||||
}));
|
||||
}
|
||||
const $$slug = createComponent(async ($$result, $$props, $$slots) => {
|
||||
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
|
||||
Astro2.self = $$slug;
|
||||
const { product } = Astro2.props;
|
||||
const { Content } = await renderEntry(product);
|
||||
const productData = productCategories.find((p) => p.id === product.data.id);
|
||||
const productTables = productData?.productTables || [];
|
||||
return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, { "title": product.data.name, "description": product.data.shortDescription || product.data.description, "data-astro-cid-o422f4lv": true }, { "default": async ($$result2) => renderTemplate` ${maybeRenderHead()}<main class="py-12" data-astro-cid-o422f4lv> <article class="container mx-auto px-4 max-w-7xl" data-astro-cid-o422f4lv> <!-- Product Header --> <header class="mb-12" data-astro-cid-o422f4lv> <h1 class="text-4xl md:text-5xl lg:text-6xl xl:text-7xl font-bold text-secondary-900 mb-6" data-astro-cid-o422f4lv> ${product.data.name} </h1> <p class="text-lg md:text-xl lg:text-2xl xl:text-3xl text-secondary-600 max-w-4xl" data-astro-cid-o422f4lv> ${product.data.description} </p> </header> <!-- Content from Markdown --> <div class="prose prose-lg md:prose-xl lg:prose-2xl max-w-none mb-12" data-astro-cid-o422f4lv> ${renderComponent($$result2, "Content", Content, { "data-astro-cid-o422f4lv": true })} </div> <!-- Product Tables Section --> ${productTables.length > 0 && renderTemplate`<section class="mb-12" data-astro-cid-o422f4lv> <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8 flex items-center gap-3" data-astro-cid-o422f4lv> <svg class="w-8 h-8 md:w-10 md:h-10 lg:w-12 lg:h-12 text-primary-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-astro-cid-o422f4lv> <path stroke-linecap="round" stroke-linejoin="round"${addAttribute(2, "stroke-width")} d="M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" data-astro-cid-o422f4lv></path> </svg>
|
||||
ตารางข้อมูลผลิตภัณฑ์
|
||||
</h2> <div class="space-y-10" data-astro-cid-o422f4lv> ${productTables.map((table2, tableIndex) => renderTemplate`<div class="bg-white rounded-2xl border-2 border-secondary-200 shadow-lg" data-astro-cid-o422f4lv> <h3 class="text-lg md:text-xl lg:text-2xl font-semibold text-secondary-800 p-4 md:p-6 bg-secondary-50 border-b-2 border-secondary-200" data-astro-cid-o422f4lv> ${table2.tableName} </h3> <div class="w-full overflow-x-auto -mx-2 md:mx-0" data-astro-cid-o422f4lv> <div class="px-2 md:px-0" data-astro-cid-o422f4lv> <table class="w-full min-w-[600px] border-collapse" data-astro-cid-o422f4lv> <thead data-astro-cid-o422f4lv> <tr class="bg-primary-100" data-astro-cid-o422f4lv> ${table2.headers.map((header, headerIndex) => renderTemplate`<th class="px-3 py-2 md:px-4 md:py-3 text-left text-xs md:text-sm lg:text-base font-bold text-primary-800 border-b-2 border-primary-300 whitespace-nowrap" data-astro-cid-o422f4lv> ${header} </th>`)} </tr> </thead> <tbody data-astro-cid-o422f4lv> ${table2.rows.map((row, rowIndex) => renderTemplate`<tr${addAttribute(rowIndex % 2 === 0 ? "bg-white" : "bg-secondary-50", "class")} data-astro-cid-o422f4lv> ${row.map((cell, cellIndex) => renderTemplate`<td class="px-3 py-2 md:px-4 md:py-3 text-xs md:text-sm lg:text-base text-secondary-700 border-b border-secondary-100 break-words max-w-[200px] md:max-w-none" data-astro-cid-o422f4lv> ${cell} </td>`)} </tr>`)} </tbody> </table> </div> </div> </div>`)} </div> </section>`})}
|
||||
<tbody data-astro-cid-o422f4lv> ${table.rows.map((row, rowIndex) => renderTemplate`<tr${addAttribute(rowIndex % 2 === 0 ? "bg-white" : "bg-secondary-50", "class")} data-astro-cid-o422f4lv> ${row.map((cell, cellIndex) => renderTemplate`<td class="px-5 py-4 md:px-6 md:py-5 text-base md:text-lg lg:text-xl text-secondary-700 border-b border-secondary-100" data-astro-cid-o422f4lv> ${cell} </td>`)} </tr>`)} </tbody>
|
||||
))}
|
||||
|
||||
|
||||
)}
|
||||
<!-- Specifications --> ${product.data.specifications && product.data.specifications.length > 0 && renderTemplate`<section class="mb-12" data-astro-cid-o422f4lv> <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8" data-astro-cid-o422f4lv>ข้อมูลจำเพาะ</h2> <div class="bg-white rounded-2xl border-2 border-secondary-200 p-6 md:p-8 shadow-lg" data-astro-cid-o422f4lv> <dl class="grid grid-cols-1 md:grid-cols-2 gap-6" data-astro-cid-o422f4lv> ${product.data.specifications.map((spec, index) => renderTemplate`<div class="flex flex-col md:flex-row md:justify-between border-b border-secondary-100 pb-4" data-astro-cid-o422f4lv> <dt class="text-base md:text-lg lg:text-xl font-semibold text-secondary-700 mb-2 md:mb-0 md:mr-4" data-astro-cid-o422f4lv>${spec.label}</dt> <dd class="text-base md:text-lg lg:text-xl text-secondary-900" data-astro-cid-o422f4lv> ${spec.value} ${spec.unit && renderTemplate`<span class="text-secondary-500 ml-2" data-astro-cid-o422f4lv>${spec.unit}</span>`} </dd> </div>`)} </dl> </div> </section>`} <!-- Features --> ${product.data.features && product.data.features.length > 0 && renderTemplate`<section class="mb-12" data-astro-cid-o422f4lv> <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8" data-astro-cid-o422f4lv>คุณสมบัติเด่น</h2> <ul class="grid grid-cols-1 md:grid-cols-2 gap-6" data-astro-cid-o422f4lv> ${product.data.features.map((feature, index) => renderTemplate`<li class="flex items-start gap-4 bg-white p-6 rounded-xl border border-secondary-200 shadow" data-astro-cid-o422f4lv> <span class="text-2xl md:text-3xl text-primary-600 flex-shrink-0" data-astro-cid-o422f4lv>✓</span> <span class="text-base md:text-lg lg:text-xl text-secondary-700" data-astro-cid-o422f4lv>${feature}</span> </li>`)} </ul> </section>`} <!-- FAQ --> ${product.data.faq && product.data.faq.length > 0 && renderTemplate`<section class="mb-12" data-astro-cid-o422f4lv> <h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-secondary-900 mb-8" data-astro-cid-o422f4lv>คำถามที่พบบ่อย</h2> <div class="space-y-6" data-astro-cid-o422f4lv> ${product.data.faq.map((item, index) => renderTemplate`<div class="bg-white rounded-2xl p-6 md:p-8 border-2 border-secondary-200 shadow" data-astro-cid-o422f4lv> <h3 class="text-xl md:text-2xl lg:text-3xl font-bold text-secondary-900 mb-4" data-astro-cid-o422f4lv>${item.question}</h3> <p class="text-base md:text-lg lg:text-xl text-secondary-700 leading-relaxed" data-astro-cid-o422f4lv>${item.answer}</p> </div>`)} </div> </section>`} </article> </main> ` })} `;
|
||||
}, "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/products/[slug].astro", void 0);
|
||||
|
||||
const $$file = "/Users/kunthawatgreethong/Gitea/dealplustech/dealplustech-astro/src/pages/products/[slug].astro";
|
||||
const $$url = "/products/[slug]";
|
||||
|
||||
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: $$slug,
|
||||
file: $$file,
|
||||
getStaticPaths,
|
||||
url: $$url
|
||||
}, Symbol.toStringTag, { value: 'Module' }));
|
||||
|
||||
const page = () => _page;
|
||||
|
||||
export { page };
|
||||
2
dealplustech-astro/dist/products/index.html
vendored
2
dealplustech-astro/dist/products/index.html
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
107
dealplustech-astro/dist/products/ท่อhdpe/index.html
vendored
107
dealplustech-astro/dist/products/ท่อhdpe/index.html
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3
dealplustech-astro/dist/renderers.mjs
vendored
Normal file
3
dealplustech-astro/dist/renderers.mjs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const renderers = [];
|
||||
|
||||
export { renderers };
|
||||
2
dealplustech-astro/node_modules/.astro/data-store.json
generated
vendored
2
dealplustech-astro/node_modules/.astro/data-store.json
generated
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user