🏊 Container Swimming Pool — Quotation Engine
Huaying Integrated Housing · Select options and configure your pool
| # | Img | Item | Description | Qty | Price |
|---|
| Img | Item | Description | Qty | Price | Add |
|---|
1. Counter-current swim trainer: price varies (tens of thousands to hundreds of thousands), inquire separately.
2. Hydrotherapy/massage functions: quoted based on specific customer requirements.
3. Smart control system: currently under development.
1
¥0
{"@context":"https://schema.org","@type":"Product","brand":{"@type":"Brand","name":"HUAYING"},"manufacturer":{"@type":"Organization","name":"Huaying Integrated House Co., Ltd."},"offers":{"@type":"Offer","priceCurrency":"CNY","availability":"https://schema.org/InStock"},"name":"集装箱游泳池在线报价 - HUAYING 预制泳池","description":"HUAYING集装箱游泳池在线报价系统。标准20ft/40ft泳池及定制尺寸,保温夹芯板结构,即装即用。"}
const RATE=6.80;const BASE_URL='https://cpq.huayinghouse.com/pool-images/';
function usd(v){return(v/RATE).toLocaleString('en-US',{maximumFractionDigits:0})} function cny(n){return n.toLocaleString('en-US')} function fmt(v){return'¥'+cny(v)}
let currentSpec='20ft';let qty=1;let options={};
const baseItems={'20ft':[{no:1,name:'Steel Frame',desc:'Steel structure frame, corrugated panel exterior',img:'image1.png'},{no:2,name:'Color Coating',desc:'Custom coating color (specify)',img:'image2.jpeg'},{no:3,name:'Waterproof Liner',desc:'Waterproof inner liner, color chart available',img:'image3.jpeg'},{no:4,name:'Decking & Stairs',desc:'Top surface decking + staircase, color chart available',img:'image4.jpeg'},{no:5,name:'Glass Window',desc:'Multi-layer laminated tempered glass (size per drawing)',img:'image5.jpeg'},{no:6,name:'Circulation Pump',desc:'Circulation water pump ×1',img:'image6.png'},{no:7,name:'Sand Filter',desc:'Sand filter ×1',img:'image7.jpeg'},{no:8,name:'LED Lights',desc:'Underwater color-changing LED ×2',img:'image8.jpeg'},{no:9,name:'Plumbing Set',desc:'Return inlets ×2 + water outlets ×2 + piping 1 set'},{no:10,name:'Skimmer',desc:'Surface skimmer ×1'},],'40ft':[{no:1,name:'Steel Frame',desc:'Steel structure frame, corrugated panel exterior',img:'image1.png'},{no:2,name:'Color Coating',desc:'Custom coating color (specify)',img:'image2.jpeg'},{no:3,name:'Waterproof Liner',desc:'Waterproof inner liner, color chart available',img:'image3.jpeg'},{no:4,name:'Decking & Stairs',desc:'Top surface decking + staircase, color chart available',img:'image4.jpeg'},{no:5,name:'Glass Window',desc:'Multi-layer laminated tempered glass (size per drawing)',img:'image5.jpeg'},{no:6,name:'Circulation Pump',desc:'Circulation water pump ×1',img:'image6.png'},{no:7,name:'Sand Filter',desc:'Sand filter ×1',img:'image7.jpeg'},{no:8,name:'LED Lights',desc:'Underwater color-changing LED ×4',img:'image8.jpeg'},{no:9,name:'Plumbing Set',desc:'Return inlets ×2 + water outlets ×2 + piping 1 set'},{no:10,name:'Skimmer',desc:'Surface skimmer ×1'},]};
const optionItems=[{id:'salt',name:'Salt Chlorine Generator',desc:'Salt chlorine disinfection system',img:'image9.png',prices:{'20ft':4800,'40ft':7200}},{id:'heatpump',name:'Pool Heat Pump',desc:'Swimming pool heat pump for temperature control',img:'image10.png',prices:{'20ft':8400,'40ft':8400}},{id:'rollercover',name:'Aluminum Electric Roller Cover',desc:'Electric rolling cover, aluminum alloy',img:'image11.png',prices:{'20ft':14000,'40ft':24000}},{id:'poolcover',name:'Pool Cover',desc:'Insulated pool cover / solar blanket',img:'image12.png',prices:{'20ft':5400,'40ft':11400}},];
const basePrices={'20ft':85000,'40ft':138000};
function renderBase(){const el=document.getElementById('baseTable');const items=baseItems[currentSpec];el.innerHTML=items.map((it,i)=>`
${it.img?`
`:'
'}
`).join('');document.getElementById('specLabel').textContent=currentSpec.toUpperCase()}
function renderOptions(){const el=document.getElementById('optTable');el.innerHTML=optionItems.map(o=>{const p=o.prices[currentSpec];const checked=options[o.id]||!1;return `
`}).join('')}
function toggleOpt(id,checked){options[id]=checked;updateSummary()}
function selectSpec(spec){currentSpec=spec;document.querySelectorAll('.spec-btn').forEach(b=>b.classList.toggle('active',b.dataset.spec===spec));options={};renderBase();renderOptions();updateSummary()}
function changeQty(d){qty=Math.max(1,qty+d);document.getElementById('qtyDisplay').textContent=qty;updateSummary()}
function updateSummary(){let total=0;const rows=[];for(const o of optionItems){if(options[o.id]){const p=o.prices[currentSpec]||0;total+=p;rows.push(`
`)}} const unitTotal=total;const grandTotal=total*qty;document.getElementById('summaryBody').innerHTML=rows.length?rows.join(''):'
';document.getElementById('totalDisplay').textContent='¥'+cny(grandTotal)}
function generateQuote(){let text='═══ CONTAINER SWIMMING POOL QUOTATION ═══\n\n';text+=`Specification: ${currentSpec.toUpperCase()} (${currentSpec==='20ft'?'5800':'11800'}×2200×1600mm)\n`;text+=`Quantity: ${qty} set(s)\n`;text+=`Date: ${new Date().toLocaleDateString('en-US')}\n\n`;
text+='── Standard Configuration ──\n';for(const it of baseItems[currentSpec]){text+=` ${it.no}. ${it.name} — ${it.desc}\n`}
const selected=optionItems.filter(o=>options[o.id]);if(selected.length){text+='\n── Optional Add-ons ──\n';let optTotal=0;for(const o of selected){const p=o.prices[currentSpec]||0;text+=` ${o.name}: ¥${cny(p)} ×${qty}\n`;optTotal+=p} text+=`\n Options total: ¥${cny(optTotal)}`}
text+=`\n\n── Price Summary ──\n`;text+=`Options total (per set): ¥${cny(selected.reduce((s,o)=>s+(o.prices[currentSpec]||0),0))}\n`;text+=`────────────────────────────────\n`;const grand=selected.reduce((s,o)=>s+(o.prices[currentSpec]||0),0)*qty;text+=`💰 TOTAL: ¥${cny(grand)} (USD $${usd(grand)})\n\n`;
text+=`Exchange rate: 1 USD = ${RATE} CNY\n`;text+=`Validity: 30 days\n\n`;text+=`Huaying Integrated Housing Co., Ltd.\ntrade@mhehy.com\n`;
document.getElementById('modalSub').textContent=`${currentSpec.toUpperCase()} Container Swimming Pool ×${qty}`;document.getElementById('modalBody').textContent=text;document.getElementById('modal').classList.add('show')}
function closeModal(){document.getElementById('modal').classList.remove('show')}
function exportPDF(){const spec=currentSpec.toUpperCase();const dim=currentSpec==='20ft'?'5800×2200×1600':'11800×2200×1600';const sel=optionItems.filter(o=>options[o.id]);const optTotal=sel.reduce((s,o)=>s+(o.prices[currentSpec]||0),0);const total=optTotal*qty;
let table='';for(const it of baseItems[currentSpec]){table+=`
`} let optRows='';for(const o of sel){optRows+=`
`}
const html=`
Container Swimming Pool Quotation
| Specification: | ${spec} (${dim}mm) |
| Quantity: | ${qty} set(s) |
| Date: | ${new Date().toLocaleDateString('en-US')} |
Standard Configuration
| # | Item | Description | Qty | Price |
|---|
${sel.length?`
Optional Add-ons
| Item | Unit Price | Qty | Total |
|---|
`:''}
`;
const div=document.createElement('div');div.innerHTML=html;document.body.appendChild(div);setTimeout(()=>{window.print();document.body.removeChild(div)},100)}
renderBase();renderOptions();updateSummary();