SỐ 1 VIỆT NAM TỔNG THẦU THIẾT KẾ & THI CÔNG NHÀ XƯỞNG CÔNG NGHIỆP
VINACON · THIẾT KẾ & THI CÔNG NHÀ XƯỞNG

Tổng thầu thiết kế & thi công nhà xưởng, nhà máy

Bạn đang tìm hiểu chi phí, cần thiết kế hay chuẩn bị thi công? Bắt đầu bằng nhu cầu thực tế của bạn để trao đổi cùng VINACON.

Xem dự án trước khi trao đổi ↓
TRAO ĐỔI VỀ DỰ ÁN CỦA BẠN

Bạn đang cần giải đáp điều gì?

Chưa có bản vẽ hoặc chưa rõ ngân sách? Hãy bắt đầu từ một câu hỏi. Bấm mở Zalo để trao đổi trực tiếp, hoặc yêu cầu VINACON gọi lại.

Chi phí thiết kế nhà xưởng bao nhiêu? Tôi cần tư vấn xây dựng nhà xưởng Chưa biết bắt đầu từ đâu? Mở Zalo trực tiếp · Không cần sao chép nội dung.
CHỦ ĐỘNG NGÂN SÁCH

Ước tính chi phí trước khi trao đổi

Khái toán theo bảng đơn giá tham khảo VINACON công bố trên website. Không cần để lại số điện thoại để xem kết quả.

  • Thiết kế cơ sở và bản vẽ thi công: 10.000–25.000 đ/m², theo bậc diện tích từ 1.000 đến 100.000 m².
  • Thi công: chọn phần thô, kết cấu và bao che, hoàn thiện cơ bản hoặc trọn gói để xem khoảng ngân sách theo quy mô.
  • Giấy phép, PCCC, khảo sát địa chất và hạng mục đặc thù cần xác định riêng.
Chọn thông số và bấm tính để xem khái toán.

Đây là khái toán theo diện tích, không phải dự toán bóc tách hoặc báo giá hợp đồng. Thuế VAT và phạm vi kỹ thuật cần được làm rõ khi lập báo giá chính thức.

Gửi thông số để VINACON tư vấn →
VINACON · TƯ VẤN DỰ ÁN

Để VINACON liên hệ với bạn

Để lại số điện thoại và nhu cầu công trình. Bạn cũng có thể gọi hoặc chat Zalo trực tiếp.

HAI LĨNH VỰC TRỌNG TÂM

Một đầu mối xuyên suốt vòng đời dự án

VINACON tập trung chuyên sâu vào thiết kế và thi công nhà xưởng, nhà máy, giúp chủ đầu tư kiểm soát đồng bộ công năng, pháp lý, tiến độ và chi phí.

01 · TƯ VẤN THIẾT KẾ

Thiết kế nhà xưởng, nhà máy

Phát triển giải pháp từ quy hoạch tổng mặt bằng đến hồ sơ kỹ thuật phục vụ xin phép và thi công.

  • Quy hoạch 1/500 & phối cảnh tổng thể
  • TKCS, TKKT, bản vẽ thi công
  • Kiến trúc, kết cấu, hạ tầng, MEP & PCCC
  • Thẩm tra, dự toán và tối ưu đầu tư
XEM NĂNG LỰC THIẾT KẾ
02 · TỔNG THẦU THI CÔNG

Thi công nhà xưởng, nhà máy

Tổ chức thi công đồng bộ, kiểm soát an toàn, chất lượng và tiến độ đến nghiệm thu bàn giao.

  • Tổng thầu Design & Build / EPC
  • Kết cấu thép, xây dựng và hoàn thiện
  • Hạ tầng kỹ thuật, MEP & PCCC
  • Cải tạo, mở rộng nhà máy đang vận hành
XEM NĂNG LỰC THI CÔNG
HỆ SINH THÁI DỊCH VỤ

Đồng bộ các bộ môn trong một quy trình

Các đầu việc được phối hợp xuyên suốt để giảm xung đột hồ sơ và rút ngắn thời gian chuẩn bị đầu tư.

Xem toàn bộ dịch vụ →

Quy hoạch 1/500

Tổ chức tổng mặt bằng, hạ tầng và định hướng phát triển dự án.

Xem chi tiết →

Pháp lý dự án

Hỗ trợ hồ sơ môi trường, PCCC, giấy phép xây dựng và nghiệm thu.

Xem chi tiết →

Thẩm tra thiết kế

Kiểm soát giải pháp kỹ thuật, khối lượng và dự toán công trình.

Xem chi tiết →

Tư vấn giám sát

Quản lý chất lượng, tiến độ, an toàn và hồ sơ trên công trường.

Xem chi tiết →

Cơ điện MEP

Điện, điện nhẹ, cấp thoát nước, HVAC và hệ thống kỹ thuật.

Xem chi tiết →

PCCC nhà máy

Thiết kế, thẩm duyệt, thi công và nghiệm thu hệ thống PCCC.

Xem chi tiết →
NĂNG LỰC VINACON

Kinh nghiệm được chứng minh bằng công trình thực tế

Xem hồ sơ năng lực
300+Dự án tham gia
15+Năm kinh nghiệm
2.000.000+ m²Quy mô đã triển khai
34Tỉnh, thành
HỒ SƠ ĐỂ CHỦ ĐẦU TƯ ĐỐI CHIẾU

Năng lực rõ ràng, thông tin có thể kiểm chứng

Tìm hiểu phạm vi chuyên môn, chứng chỉ và kinh nghiệm dự án trước khi lựa chọn đối tác.

02 · NĂNG LỰC CHUYÊN MÔN

Chứng chỉ hoạt động xây dựng

Xem bản chứng chỉ, lĩnh vực và phạm vi năng lực được cấp.

Xem chứng chỉ năng lực →
03 · HỆ THỐNG QUẢN LÝ

ISO 9001:2015 · ISO 45001:2018

Chứng nhận hệ thống quản lý chất lượng và an toàn, sức khỏe nghề nghiệp.

Xem chứng nhận ISO →
DỰ ÁN TIÊU BIỂU

Nhà xưởng và nhà máy trên toàn quốc

Hồ sơ công trình thể hiện quy mô, địa điểm, phạm vi công việc và giải pháp VINACON thực hiện.

Xem tất cả dự án →

Tôi muốn trao đổi về công trình của mình →

QUY TRÌNH TRIỂN KHAI

Sáu bước kiểm soát dự án

01

Tiếp nhận

Nhu cầu và dữ liệu dự án

02

Khảo sát

Hiện trạng và điều kiện triển khai

03

Phương án

Giải pháp kỹ thuật và chi phí

04

Thiết kế

Hồ sơ đa bộ môn đồng bộ

05

Thi công

Tiến độ, chất lượng, an toàn

06

Bàn giao

Nghiệm thu và hoàn công

TRƯỚC KHI BẮT ĐẦU

Những điều bạn có thể đang băn khoăn

Không cần chuẩn bị đầy đủ hồ sơ mới có thể trao đổi. Hãy bắt đầu từ thông tin bạn đang có.

Tôi có câu hỏi khác →
Chưa có bản vẽ, tôi có thể hỏi tư vấn không?

Có. Bạn có thể bắt đầu bằng địa điểm, diện tích dự kiến và nhu cầu sử dụng nhà xưởng. Nếu chưa xác định đủ, hãy nêu điều bạn đang cần làm rõ để cùng trao đổi bước tiếp theo.

Cần cung cấp gì để trao đổi về chi phí?

Thông tin hữu ích gồm diện tích, địa điểm, công năng, nhu cầu thiết kế hay thi công và thời điểm dự kiến triển khai. Nếu có bản vẽ hoặc ảnh hiện trạng, bạn có thể gửi qua Zalo. Phạm vi công việc cần được làm rõ trước khi có báo giá cụ thể.

Hỏi về chi phí dự án của tôi →
Tôi muốn cải tạo nhà xưởng đang sử dụng thì sao?

Hãy mô tả hiện trạng, hạng mục muốn thay đổi và việc nhà xưởng có tiếp tục hoạt động trong thời gian cải tạo hay không. Ảnh hiện trạng và bản vẽ sẵn có sẽ giúp cuộc trao đổi cụ thể hơn.

Trao đổi về cải tạo, mở rộng →
Tôi có thể gửi bản vẽ hoặc trao đổi trực tiếp ở đâu?

Bạn có thể mở Zalo để gửi bản vẽ, ảnh hiện trạng và câu hỏi cho VINACON, hoặc gọi điện để trao đổi trực tiếp. Nút Zalo mở trực tiếp kênh liên hệ của VINACON để bạn gửi câu hỏi và hồ sơ.

Mở Zalo để trao đổi ↗
TỪ CÂU HỎI ĐẾN CUỘC TRAO ĐỔI

Bắt đầu bằng ba thông tin đơn giản

01

Bạn muốn làm gì?

Thiết kế mới, thi công trọn gói hay cải tạo nhà xưởng hiện có.

02

Quy mô và địa điểm?

Diện tích dự kiến, tỉnh/thành hoặc khu công nghiệp triển khai.

03

Điều cần giải đáp?

Chi phí, phạm vi công việc, tiến độ hoặc bước chuẩn bị tiếp theo.

Zalo Chat Zalo với VINACONGửi câu hỏi, bản vẽ và ảnh hiện trạng ☎ Yêu cầu gọi lạiĐể lại nhu cầu công trình
Gọi điện Chat Zalo Dự án CĐT Gọi lại
CÔNG CỤ TỔNG THẦU VINACON

Bạn muốn tính chi phí nào?

Chọn bộ tính phù hợp với nhu cầu và quy mô công trình của bạn.

Thiết kế nhà xưởngChọn quy mô và phạm vi hồ sơ để tính phí thiết kế.Mở bộ tính →Thi công nhà xưởngƯớc tính ngân sách theo diện tích và gói thi công.Mở bộ tính →Giám sát công trìnhXác định chi phí giám sát cho công trình của bạn.Mở bộ tính →Thẩm tra thiết kếTính phí theo loại công trình và giá trị xây dựng.Mở bộ tính →
Xem trung tâm công cụ → Chưa rõ? Gọi Kỹ sư trưởng 0904 873 388
VINACON · Hồ sơ của bạn

Lưu lại thông tin anh/chị vừa chuẩn bị

Giữ thông tin nhà xưởng và các cuộc tư vấn đã lưu trong khu vực riêng. Lần sau tiếp tục từ nơi anh/chị đã dừng.

Hồ sơ hiện được ghi nhớ trên trình duyệt này. Không chia sẻ thiết bị khi đang mở hồ sơ.

';w.document.open(); w.document.write(html); w.document.close(); }function calculateEstimates(data) { var areaText = data.area || ''; var areaVal = 7500; // Mặc định 7.500 m2 if (data.area_custom && Number(data.area_custom) > 0) { areaVal = Number(data.area_custom); } else if (areaText.indexOf('Dưới 5.000') !== -1) { areaVal = 3500; } else if (areaText.indexOf('5.000') !== -1 && areaText.indexOf('10.000') !== -1) { areaVal = 7500; } else if (areaText.indexOf('10.000') !== -1 && areaText.indexOf('20.000') !== -1) { areaVal = 15000; } else if (areaText.indexOf('20.000') !== -1 && areaText.indexOf('50.000') !== -1) { areaVal = 35000; } else if (areaText.indexOf('50.000') !== -1 && areaText.indexOf('100.000') !== -1) { areaVal = 75000; } else if (areaText.indexOf('Trên 100.000') !== -1) { areaVal = 120000; }// 1. Thiết kế nhà xưởng: 125k - 165k/m2 var dMin = Math.round(areaVal * 125000 / 1000000); var dMax = Math.round(areaVal * 165000 / 1000000);// 2. Thẩm tra thiết kế & dự toán: định mức var rMin = Math.max(35, Math.round(areaVal * 0.008)); var rMax = Math.max(55, Math.round(areaVal * 0.012));// 3. Thi công nhà xưởng: 2.3 - 3.5 tr/m2 var bMin = ((areaVal * 2.3) / 1000).toFixed(1); var bMax = ((areaVal * 3.5) / 1000).toFixed(1);// 4. Khảo sát địa chất: 3-5 hố khoan tiêu chuẩn var gMin = Math.max(30, Math.round(25 + (areaVal / 1000) * 3)); var gMax = Math.max(50, Math.round(35 + (areaVal / 1000) * 4.5));// 5. Pháp lý quy hoạch & Thẩm duyệt PCCC var lMin = Math.max(60, Math.round(50 + (areaVal / 1000) * 5)); var lMax = Math.max(95, Math.round(80 + (areaVal / 1000) * 8));return { area: areaVal, design: dMin + ' – ' + dMax + ' Triệu VNĐ', review: rMin + ' – ' + rMax + ' Triệu VNĐ', build: bMin + ' – ' + bMax + ' Tỷ VNĐ', geotech: gMin + ' – ' + gMax + ' Triệu VNĐ', legal: lMin + ' – ' + lMax + ' Triệu VNĐ' }; }function card(p){ var data = p.data || {}, c = el('article', '', 'vncp-card'); c.appendChild(el('small', 'DỰ ÁN NHÀ XƯỞNG')); c.appendChild(el('h3', data.project || 'Dự án chưa đặt tên')); var meta = el('div', '', 'vncp-project-meta'); [['location','Địa điểm'],['area','Quy mô'],['service','Nhu cầu'],['industry','Ngành'],['schedule','Triển khai']].forEach(function(item){ var row = el('div'); row.appendChild(el('b', item[1] + ': ')); row.appendChild(el('span', value(data, item[0]) || 'Chưa xác định')); meta.appendChild(row); }); c.appendChild(meta);// === KHỐI BÁO GIÁ ĐA NĂNG 5 DỊCH VỤ TRỌN GÓI === var est = calculateEstimates(data); var estBox = el('div', '', 'vncp-estimator'); var estHead = el('div', '', 'vncp-estimator-head'); var estTitle = el('h4', '📊 DỰ TOÁN NGÂN SÁCH TRỌN GÓI DỰ ÁN', 'vncp-estimator-title'); var estBadge = el('span', 'Quy mô ước tính ~' + est.area.toLocaleString() + ' m²', 'vncp-estimator-badge'); estHead.appendChild(estTitle); estHead.appendChild(estBadge); estBox.appendChild(estHead);var estGrid = el('div', '', 'vncp-estimate-grid');// Gói 1: Thiết kế nhà xưởng var card1 = el('div', '', 'vncp-est-card'); card1.innerHTML = '
📐
1. Báo giá Thiết kế nhà xưởng

Hồ sơ thiết kế kiến trúc, kết cấu thép, MEP và tổng mặt bằng.

Khái toán thiết kế:' + est.design + '
Xem chi tiết bảng giá thiết kế →'; estGrid.appendChild(card1);// Gói 2: Thẩm tra thiết kế & dự toán var card2 = el('div', '', 'vncp-est-card'); card2.innerHTML = '
📋
2. Thẩm tra Thiết kế & Dự toán

Đánh giá độc lập giải pháp kết cấu, tối ưu dự toán và an toàn chịu lực.

Lệ phí thẩm tra:' + est.review + '
Xem biểu phí thẩm tra →'; estGrid.appendChild(card2);// Gói 3: Khái toán Thi công xây lắp var card3 = el('div', '', 'vncp-est-card'); card3.innerHTML = '
🏗️
3. Khái toán Thi công hoàn thiện

Gia công lắp dựng kết cấu thép, bao che tôn mái, nền sàn chịu lực.

Khái toán xây lắp:' + est.build + '
Xem bóc tách dự toán thi công →'; estGrid.appendChild(card3);// Gói 4: Khảo sát địa chất công trình var card4 = el('div', '', 'vncp-est-card'); card4.innerHTML = '
🌍
4. Khảo sát Địa chất & Địa hình

Khoan khảo sát địa chất, thí nghiệm chỉ tiêu cơ lý đất nền và lập báo cáo.

Chi phí khảo sát:' + est.geotech + '
Tư vấn phương án khoan khảo sát →'; estGrid.appendChild(card4);// Gói 5: Pháp lý, Quy hoạch 1/500 & PCCC var card5 = el('div', '', 'vncp-est-card'); card5.innerHTML = '
⚖️
5. Pháp lý, GPXD & Thẩm duyệt PCCC

Xin cấp phép xây dựng, quy hoạch 1/500 và thẩm duyệt nghiệm thu PCCC.

Dự toán pháp lý & PCCC:' + est.legal + '
Nhận tư vấn quy trình pháp lý →'; estGrid.appendChild(card5);estBox.appendChild(estGrid);// Thanh nút hành động kích thích chuyển đổi cao var actBar = el('div', '', 'vncp-est-actions'); var btnPrint = el('button', '🖨️ Xuất Báo Giá Có Dấu & Ký Tên (PDF)', 'vncp-btn-print'); btnPrint.type = 'button'; btnPrint.onclick = function(){ openOfficialQuote(p); }; actBar.appendChild(btnPrint);var btnZalo = el('a', '💬 Gửi Zalo Kỹ sư VINACON', 'vncp-btn-zalo'); btnZalo.href = 'https://zalo.me/0904873388'; btnZalo.target = '_blank'; btnZalo.rel = 'noopener'; actBar.appendChild(btnZalo);var btnCallbackReq = el('button', '📞 Kỹ sư tư vấn tối ưu chi phí', 'vncp-btn-consult'); btnCallbackReq.type = 'button'; btnCallbackReq.onclick = function(){ btnCallbackReq.disabled = true; btnCallbackReq.textContent = 'Đang gửi yêu cầu…'; api('callback').then(function(res){ alert('VINACON đã nhận yêu cầu! Kỹ sư phụ trách sẽ liên hệ lại với anh/chị ngay.'); btnCallbackReq.textContent = '✓ Đã gửi yêu cầu tư vấn'; }).catch(function(err){ alert(err.message || 'Lỗi gửi yêu cầu.'); btnCallbackReq.disabled = false; btnCallbackReq.textContent = '📞 Kỹ sư tư vấn tối ưu chi phí'; }); }; actBar.appendChild(btnCallbackReq);estBox.appendChild(actBar); c.appendChild(estBox);if (p.updated) c.appendChild(el('p', 'Cập nhật: ' + p.updated, 'vncp-note')); var b = el('button', 'Mở & tiếp tục dự án trên trang công cụ →', 'vncp-primary'); b.type = 'button'; b.onclick = function(){ openProject(p.id); }; c.appendChild(b); return c; }function render(r){ if (anon) anon.hidden = true; if (account) account.hidden = false; if (status) { status.textContent = ''; status.style.display = 'none'; } var profile = r.profile || {}, name = profile.name || 'Chủ đầu tư'; setText('vncp-side-name', name); setText('vncp-side-phone', r.phone || ''); setText('vncp-greeting', 'Xin chào, ' + name + '!'); var projects = (r.projects || []).slice().sort(function(a, b){ return String(b.updated).localeCompare(String(a.updated)); }); var threads = (r.threads || []).filter(function(t){ return t && typeof t.text === 'string'; }); setText('vncp-project-count', String(projects.length)); setText('vncp-chat-count', String(threads.length)); setText('vncp-progress', r.state || 'Đã tiếp nhận'); setText('vncp-callback-status', r.callback ? ('Bạn đã yêu cầu gọi lại: ' + r.callback) : 'VINACON sẽ liên hệ theo số bạn đã cung cấp.'); var list = document.getElementById('vncp-project-list'), latest = document.getElementById('vncp-latest'); if (list) { list.replaceChildren(); projects.forEach(function(p){ list.appendChild(card(p)); }); if (!projects.length) list.appendChild(el('p', 'Bạn chưa có dự án đã lưu. Bấm “Thêm dự án” để bắt đầu.')); } if (latest) { latest.replaceChildren(); if (projects.length) latest.appendChild(card(projects[0])); else latest.appendChild(el('p', 'Bắt đầu bằng địa điểm, diện tích và nhu cầu của bạn.')); } var chat = document.getElementById('vncp-chat-list'); if (chat) { chat.replaceChildren(); threads.slice().reverse().forEach(function(t, i){ var d = el('details', '', 'vncp-chat-item'); d.appendChild(el('summary', 'Cuộc trao đổi ' + (threads.length - i) + ' · ' + (t.at || ''))); d.appendChild(el('pre', t.text)); chat.appendChild(d); }); if (!threads.length) chat.appendChild(el('p', 'Chưa có cuộc trao đổi đã lưu. Bạn có thể bắt đầu tư vấn từ trang công cụ.')); } var form = document.getElementById('vncp-profile'); if (form) { form.elements.name.value = profile.name || ''; form.elements.company.value = profile.company || ''; var fPhone = document.getElementById('vncp-profile-phone'); if (fPhone) fPhone.value = r.phone || ''; } }function load(){ var current = ++revision; api('status').then(function(r){ if (current !== revision) return; if (!r.active){ if (anon) anon.hidden = false; if (account) account.hidden = true; if (status) { status.textContent = ''; status.style.display = 'none'; } return; } return api('load').then(function(data){ if (current === revision) render(data); }); }).catch(function(e){ if (status) { status.textContent = e.message; status.style.display = 'block'; } if (feedback) feedback.textContent = e.message; }); }var formProfile = document.getElementById('vncp-profile'); if (formProfile) { formProfile.onsubmit = function(e){ e.preventDefault(); var form = e.currentTarget, b = form.querySelector('button'); if (b) b.disabled = true; api('profile', {name: form.elements.name.value, company: form.elements.company.value}).then(function(r){ var name = form.elements.name.value.trim() || 'Chủ đầu tư'; setText('vncp-greeting', 'Xin chào, ' + name + '!'); setText('vncp-side-name', name); if (feedback) feedback.textContent = r.message; }).catch(function(e){ if (feedback) feedback.textContent = e.message; }).finally(function(){ if (b) b.disabled = false; }); }; }var btnCallback = document.getElementById('vncp-callback'); if (btnCallback) { btnCallback.onclick = function(){ var b = this; b.disabled = true; api('callback').then(function(r){ if (feedback) feedback.textContent = r.message; setText('vncp-callback-status', r.message); }).catch(function(e){ if (feedback) feedback.textContent = e.message; }).finally(function(){ b.disabled = false; }); }; }var btnLogout = document.getElementById('vncp-logout'); if (btnLogout) { btnLogout.onclick = function(){ var b = this; b.disabled = true; api('end').then(function(){ revision++; if (account) account.hidden = true; if (anon) anon.hidden = false; if (status) { status.textContent = ''; status.style.display = 'none'; } var pList = document.getElementById('vncp-project-list'); if (pList) pList.replaceChildren(); var cList = document.getElementById('vncp-chat-list'); if (cList) cList.replaceChildren(); var lList = document.getElementById('vncp-latest'); if (lList) lList.replaceChildren(); var pForm = document.getElementById('vncp-profile'); if (pForm) pForm.reset(); document.dispatchEvent(new Event('vncc:session-ended')); }).catch(function(e){ if (feedback) feedback.textContent = e.message; }).finally(function(){ b.disabled = false; }); }; }/* ============================================================== XỬ LÝ ĐĂNG NHẬP / TẠO TÀI KHOẢN AN TOÀN VÀ NHẠY BÉN 100% ============================================================== */ var tabLogin = document.getElementById('vncp-tab-login'), tabRegister = document.getElementById('vncp-tab-register'), authForm = document.getElementById('vncp-auth-form'), authBtn = document.getElementById('vncp-auth-btn'), authMsg = document.getElementById('vncp-auth-msg'), phoneField = document.getElementById('vncp-auth-phone'), passField = document.getElementById('vncp-auth-pass'), nameField = document.getElementById('vncp-auth-name'), pass2Field = document.getElementById('vncp-auth-pass2'), rowName = document.getElementById('vncp-row-name'), rowPass2 = document.getElementById('vncp-row-pass2'), authTitle = document.getElementById('vncp-auth-title'), authDesc = document.getElementById('vncp-auth-desc'), switchNote = document.getElementById('vncp-switch-note'), linkToRegister = document.getElementById('vncp-link-to-register'), isRegisterMode = false;function setMode(isRegister) { isRegisterMode = isRegister; if (authMsg) authMsg.textContent = ''; if (isRegister) { if (tabRegister) tabRegister.classList.add('active'); if (tabLogin) tabLogin.classList.remove('active'); if (rowName) rowName.style.display = 'block'; if (rowPass2) rowPass2.style.display = 'block'; if (nameField) nameField.required = true; if (pass2Field) pass2Field.required = true; if (authBtn) authBtn.textContent = 'Tạo tài khoản & lưu dự án →'; if (authTitle) authTitle.textContent = 'Tạo tài khoản Chủ đầu tư mới'; if (authDesc) authDesc.textContent = 'Đăng ký nhanh bằng số điện thoại để lưu trữ hồ sơ, bản vẽ và kết nối trực tiếp Kỹ sư VINACON.'; if (switchNote) switchNote.innerHTML = 'Đã có tài khoản? Bấm vào đây để đăng nhập'; var linkLogin = document.getElementById('vncp-link-to-login'); if (linkLogin) linkLogin.onclick = function(e){ e.preventDefault(); setMode(false); }; } else { if (tabLogin) tabLogin.classList.add('active'); if (tabRegister) tabRegister.classList.remove('active'); if (rowName) rowName.style.display = 'none'; if (rowPass2) rowPass2.style.display = 'none'; if (nameField) nameField.required = false; if (pass2Field) pass2Field.required = false; if (authBtn) authBtn.textContent = 'Đăng nhập & đồng bộ →'; if (authTitle) authTitle.textContent = 'Đăng nhập để quản lý dự án trên mọi thiết bị'; if (authDesc) authDesc.textContent = 'Dự án, lịch sử tư vấn và hồ sơ liên hệ được đồng bộ an toàn với tài khoản của bạn.'; if (switchNote) switchNote.innerHTML = 'Chưa có tài khoản? Bấm tạo tài khoản mới'; var linkReg = document.getElementById('vncp-link-to-register'); if (linkReg) linkReg.onclick = function(e){ e.preventDefault(); setMode(true); }; } }if (tabLogin) tabLogin.onclick = function(e){ e.preventDefault(); setMode(false); }; if (tabRegister) tabRegister.onclick = function(e){ e.preventDefault(); setMode(true); }; if (linkToRegister) linkToRegister.onclick = function(e){ e.preventDefault(); setMode(true); };if (authForm) { authForm.onsubmit = function(e){ e.preventDefault(); var p = phoneField ? (phoneField.value || '').trim() : '', pw = passField ? (passField.value || '').trim() : '', nm = nameField ? (nameField.value || '').trim() : '', pw2 = pass2Field ? (pass2Field.value || '').trim() : '';if (!p || p.length < 9) { if (authMsg) { authMsg.style.color = '#e11d48'; authMsg.textContent = 'Vui lòng nhập số điện thoại hợp lệ (9-11 chữ số).'; } if (phoneField) phoneField.focus(); return; } if (!pw || pw.length < 4) { if (authMsg) { authMsg.style.color = '#e11d48'; authMsg.textContent = 'Mật khẩu tối thiểu 4 ký tự.'; } if (passField) passField.focus(); return; } if (isRegisterMode) { if (!nm) { if (authMsg) { authMsg.style.color = '#e11d48'; authMsg.textContent = 'Vui lòng nhập họ và tên của anh/chị.'; } if (nameField) nameField.focus(); return; } if (pw !== pw2) { if (authMsg) { authMsg.style.color = '#e11d48'; authMsg.textContent = 'Mật khẩu xác nhận không trùng khớp. Vui lòng nhập lại.'; } if (pass2Field) pass2Field.focus(); return; } }if (authBtn) { authBtn.disabled = true; authBtn.textContent = 'Đang xử lý kết nối…'; } if (authMsg) { authMsg.style.color = '#0b5c90'; authMsg.textContent = 'Đang kết nối hệ thống dữ liệu VINACON…'; }function doStart() { return api('start', {phone: p, consent: '1', source: location.origin + location.pathname}).then(function(res){ try { localStorage.setItem('vinacon.investor.phone', p); localStorage.setItem('vinacon.investor.auth', '1'); if (nm) localStorage.setItem('vinacon.investor.name', nm); } catch(err){}if (isRegisterMode && nm) { return api('profile', {name: nm}).then(function(){ return res; }).catch(function(){ return res; }); } return res; }); }doStart().catch(function(err){ if (err && err.message && err.message.indexOf('kết thúc phiên') !== -1) { return api('end').then(function(){ return doStart(); }); } throw err; }).then(function(){ if (authMsg) { authMsg.style.color = '#10b981'; authMsg.textContent = isRegisterMode ? '✓ Tạo tài khoản thành công! Đang chuyển vào không gian dự án…' : '✓ Đăng nhập thành công! Đang đồng bộ dữ liệu…'; } setTimeout(function(){ location.reload(); }, 600); }).catch(function(err){ if (authBtn) { authBtn.disabled = false; authBtn.textContent = isRegisterMode ? 'Tạo tài khoản & lưu dự án →' : 'Đăng nhập & đồng bộ →'; } if (authMsg) { authMsg.style.color = '#e11d48'; authMsg.textContent = err.message || 'Hệ thống đang bận. Vui lòng thử lại.'; } }); }; }load(); })();