📌 Nguyên tắc: Quỹ BP chỉ ghi nhận & tra cứu. Quỹ = 0 cuối ngày. Hạch toán trả nợ Toà nhà tại Module 📊 Công nợ.
💵 Tiền mặt
0 ₫
🏦 Ngân hàng
0 ₫
📊 Tổng quỹ
0 ₫
⚠️ Quỹ âm — kiểm tra lại thu/chi
📒 Lịch sử phát sinh quỹ
Ngày
Loại
Nội dung
Thu (+)
Chi (−)
Số dư
💬 Feedback Khách hàng
📊 Phản hồi gần đây
Thời gian
Bàn
Cảm xúc
Nội dung
Phân tích
📈 Tổng hợp Doanh thu — Chi phí — Lợi nhuận
🧑💼 Khai báo Nhân sự Bộ phận
Họ và Tên
Ngày sinh
Chức vụ
SĐT
Lương cơ bản
Phụ cấp
Chính sách lương
Thao tác
TỔNG QUỸ LƯƠNG:
0 ₫
0 ₫
📝 Đề xuất Bộ phận
📋 Danh sách đề xuất
Ngày
Tiêu đề
Nội dung
Người đề xuất
Trạng thái
Trả lời BLĐ
Thao tác
✅ Phê duyệt – Trả lời Ban Lãnh Đạo
📋 Đề xuất chờ phê duyệt
Ngày
Tiêu đề
Nội dung đề xuất
Người gửi
Trạng thái
Phản hồi
Thao tác
👤 Quản lý Tài khoản & Phân quyền
ℹ️ Tài khoản đồng bộ mọi máy — kể cả mật khẩu. Mật khẩu được mã hoá mạnh (mã xác minh lặp nhiều vòng + muối riêng) trước khi đồng bộ — không bao giờ gửi mật khẩu thô hay băm đơn lên server. Đặt/đổi mật khẩu ở MỘT máy là vài giây sau đăng nhập được ở TẤT CẢ máy; đổi mật khẩu thì mật khẩu cũ hết hiệu lực ở mọi nơi. Tài khoản cũ (trước bản nâng cấp) tự "lên đời" ở lần đăng nhập đầu tiên trên máy đã có mật khẩu. Xoá tài khoản lan sang mọi máy; tài khoản Admin hoạt động cuối cùng không xoá được.
🔐 Đã sửa lỗi "phân quyền rồi vẫn bị out" (26/09). Nguyên nhân: một đoạn di trú cũ tự đặt lại quyền Nhân viên về mức cơ bản mỗi khi có máy mới / máy vừa xoá dữ liệu trình duyệt / máy lâu ngày không bật khởi động, rồi đẩy lên server nên mất quyền trên tất cả các máy (mất đúng 💰 Doanh thu (DT-LN) và 🏦 Quỹ BP). Đoạn đó đã bị xoá — từ nay quyền admin cấp là quyền cuối cùng, không máy nào ghi đè được. Cột Phân quyền Module dưới đây hiện đủ quyền của từng người; quyền đã mất trước đây phải cấp lại bằng tay (app không tự đoán) — bấm ⚡ Cấp nhanh quyền để chọn nhiều người + nhiều quyền một lần.
🔐 Cảnh báo bảo mật: mã xác minh mật khẩu nằm trên vùng dữ liệu chung của quán (điện thoại khách quét QR đọc được). Hãy đổi ngay các mật khẩu mặc định (admin123, staff123…) và dùng mật khẩu từ 6 ký tự trở lên — càng dài càng khó dò.
Tên đăng nhập
Họ tên
Vai trò
Phân quyền Module
Trạng thái
Thao tác
📊
Bảng theo dõi nhà hàng
Dành cho chủ quán — chỉ xem, không chỉnh sửa dữ liệu.
🔒 (Có thể đặt mã xem trong Cài đặt → mục Ngưỡng cảnh báo Bếp/Quầy của app)
🔐 Bảo mật nâng cao (tuỳ chọn)
Nếu database yêu cầu đăng nhập, nhập tài khoản thiết bị bên dưới. Bỏ trống nếu database cho phép đọc trực tiếp.
📊 Bảng theo dõi
⚠️ Không kết nối được — kiểm tra URL / mạng
⏳ Đang tải dữ liệu...
📅 Hôm nay —
0 ₫
Tổng doanh thu
0
Số đơn
0 ₫
TB / đơn
0 ₫
💵 Tiền mặt
0 ₫
🏦 Ngân hàng
0 ₫
📝 Ghi nợ
🕐 Hôm nay — theo ca
🍽️ Hôm nay — theo lĩnh vực
📈 7 ngày gần nhất
🏆 Top 5 món bán chạy
⏰ Giờ cao điểm (7 ngày qua)
🗓️ Tháng này —
0 ₫
Tổng doanh thu tháng
—
0
Số đơn
0 ₫
TB / đơn
📱 Kênh đặt món QR
🏢 Tên đơn vị cấp trên
🪑 Số bàn
🖥️ Giao diện Order
💾 Sao lưu & Phục hồi dữ liệu
📥
Sao lưu dữ liệu
Xuất toàn bộ dữ liệu ra file JSON để lưu trữ an toàn. File KHÔNG chứa mật khẩu, khoá API, cấu hình Firebase hay mã khôi phục.
📤
Phục hồi dữ liệu
Nhập file sao lưu (.json) đã xuất trước đó để khôi phục
📋
Chốt kỳ — Tạo file nhẹ
Giữ khai báo (SP, KH, chi phí), kết chuyển tồn kho & công nợ thành số đầu kỳ, xoá dữ liệu phát sinh
🔥 Xoá dữ liệu Firebase Server
Nếu Reset không sạch, bấm nút này để xoá trực tiếp trên Firebase server.
💡 Lưu ý: Nên sao lưu dữ liệu cuối mỗi ngày. File sao lưu chứa toàn bộ thực đơn, đơn hàng, công nợ, kho hàng, nhân sự... Phục hồi sẽ ghi đè toàn bộ dữ liệu hiện tại — trừ tài khoản & phân quyền (luôn giữ trạng thái đang dùng).
🤖 Tích hợp AI (DeepSeek)
Kết nối AI để kiểm tra tính chính xác dữ liệu, hỏi đáp thông minh tại các Module: Order, Chờ TT, Doanh thu, Công nợ, Quỹ BP, Chi phí, Kho, Tổng hợp.
🛡️ Bảo vệ khôi phục admin
Nút "🔧 Quên/khôi phục mật khẩu admin?" ở màn đăng nhập sẽ hỏi mã 6 số này trước khi reset admin về admin/admin123 — người lạ đứng trước máy không thể tự chiếm quyền. Sai 3 lần bị khoá 5 phút. Mã chỉ lưu trên máy này (không đồng bộ) — hãy đặt trên từng máy dùng chung.
🔔 Âm thanh & Thông báo
Chuông báo khi Bếp (KDS) nhận món mới; thông báo hệ thống khi bàn gọi thêm món, có đề xuất chờ duyệt, nhắc nộp quỹ. Cài đặt lưu theo từng thiết bị.
⏱ Ngưỡng cảnh báo Bếp/Quầy (phút)
Ô món chuyển CAM khi chờ ≥ ngưỡng cảnh báo, ĐỎ + nhấp nháy khi ≥ ngưỡng trễ (kèm chuông tự nhắc). Đồng bộ mọi máy.
🔊 Nhắc liên tục & Loa nội bộ
Màn hình Bếp/Quầy tự kêu chuông nhắc theo chu kỳ khi còn món quá ngưỡng (quá TRỄ thì nhắc dày gấp đôi). Loa nội bộ: lễ tân bấm 📢 Loa để nhắn — máy trạm hiện băng-rôn và ĐỌC thành tiếng.
📊 Mã xem Bảng theo dõi (?m=dash)
Đặt 4–6 chữ số thì link ?m=dash sẽ hỏi mã trước khi hiện doanh thu (sai 5 lần khoá 5 phút). Để trống = không hỏi mã như cũ. Trang 📊 trong app (chỉ admin) không bị ảnh hưởng.
🍽️ Order tại bàn & Feedback
Khách gọi món bằng mã QR dán tại bàn. Tạo mã QR feedback để khách đánh giá sau bữa ăn.
🍽️
Gọi món bằng QR tại bàn
In mã QR dán mỗi bàn — khách quét bằng điện thoại để gọi món. Nhân viên đặt hộ khách: đăng nhập tài khoản của mình, bấm ➕ Mở bàn / đặt hộ trên ô bàn (hoặc ➕ Đặt hộ khách trong ngăn bàn). (Đăng nhập bằng số bàn đã bỏ vì không an toàn trên website công khai.)
Khách tự khai số người (người lớn / trẻ em) rồi gọi mọi món trong thực đơn, số lượng tuỳ ý. Món chỉ vào bếp sau khi nhân viên xác nhận tại Chờ TT.
💬
QR Feedback
Khách scan sau bữa ăn để đánh giá, phân tích cảm xúc tự động
📊 Feedback gần đây
Thời gian
Bàn
Cảm xúc
Nội dung
Phân tích
🗄️ Lưu trữ & dọn dữ liệu
Tự động dọn dữ liệu phát sinh quá hạn (đơn đã thanh toán, nhật ký bàn, món huỷ, đánh giá…) để máy chạy nhẹ. Số dư quỹ, công nợ và tồn kho KHÔNG đổi — phần bị dọn được kết chuyển vào tồn đầu kỳ và kết chuyển quỹ; chạy xong hệ thống tự đối chiếu, lệch là hoàn tác ngay. Giữ nguyên: công nợ, sổ quỹ, phiếu nhập kho, chi phí, chốt sổ.
💡 File sao lưu được tải về thư mục Tải xuống của máy này (tên PMNuong_LuuTru_<ngày>.json). Hãy chép sang ổ cứng ngoài / Google Drive mỗi tháng — đây là bản duy nhất chứa chi tiết đã dọn.
Lần chạy
Mốc
Đã lưu trữ
Bản ghi
📊 Dung lượng & băng thông (Firebase miễn phí)
📦 Kho lưu trữ tháng (niêm phong)
🧪 Dữ liệu mẫu (thử nghiệm)
⚠️ Lưu ý: nút này THÊM bản ghi demo (24 món kèm định mức, 12 nguyên liệu, 3 phiếu nhập kho, 2 combo buffet, 8 khách lẻ + feedback, 40 hoá đơn trong 7 ngày, 3 bàn đang mở + 1 bàn chờ xác nhận, 1 chi phí, 1 lần chốt sổ hôm qua) vào dữ liệu đang có. Mọi bản ghi được gắn cờ _demo nên gỡ lại được chính xác. Chỉ dùng khi đang chạy thử — không nạp trên máy đang bán hàng thật.
🧩 Module nâng cao (đang tắt cho gọn)
Các module ít dùng được ẩn khỏi giao diện. Bật lại khi cần — thay đổi đồng bộ tới mọi máy.
🎰 Vòng quay may mắn (hoá đơn lớn)
Vòng quay chạy theo ngày (admin bật từng ngày). Sau khi thanh toán xong, hệ thống mời quay — mỗi bàn 1 lượt/ngày, quà tặng cho lần tới / nhận tại quầy (không trừ tiền bill). Tuỳ chỉnh giải thưởng và màu sắc bên dưới.
🧾 Thông tin quán trên bill
In ở đầu và chân mỗi bill thanh toán (khổ A5 / in nhiệt 80mm / 58mm — chọn khổ ngay trong cửa sổ in, máy tự nhớ). Đồng bộ mọi máy.
Khổ in đã nhớ trên máy này: —
🏦 Tài khoản nhận chuyển khoản
Dùng cho nút 🏦 CHUYỂN KHOẢN khi thanh toán: hệ thống tự tạo mã VietQR động (đúng số tiền + nội dung "BAN <số bàn>") cho khách quét.
🔗 Link công khai & Firebase ADMIN
🔥 Cấu hình Firebase Realtime Database
Kết nối Firebase để đồng bộ dữ liệu giữa nhiều máy. 🔄 Auto-sync realtime + mỗi 30 giây. Trạng thái: 🔴 Chưa kết nối
Bỏ trống nếu chưa bật Bảo mật. Xem thẻ 📖 Hướng dẫn ở cuối trang Cài đặt (đã nhúng sẵn trong phần mềm).
Hướng dẫn: Vào Firebase Console → Tạo project → Realtime Database → Tạo database → Lấy config từ Project Settings.
🔐 Bảo mật + Cho khách quét QR (QUAN TRỌNG): Bộ luật (Rules) phải dán vào Realtime Database → Rules nằm trong thẻ 📖 Hướng dẫn ở cuối trang này — có sẵn nút 📋 Sao chép. KHÔNG để test mode (".read":true,".write":true) — ai có link cũng xoá sạch được.
📖 Hướng dẫn ADMIN
🔐 Bật bảo mật Firebase
Làm đúng thứ tự từng bước. Chỉ cần làm 1 lần trên máy tính, sau đó nhập email/mật khẩu trên từng thiết bị.
Khi CHƯA làm các bước này, phần mềm vẫn chạy bình thường như cũ — bảo mật là tuỳ chọn.
Menu trái → Authentication → Get started (nếu là lần đầu).
Thẻ Sign-in method → bật CẢ HAI:
Email/Password → Enable → Save (không cần bật Email link).
Anonymous → Enable → Save (để KHÁCH quét QR gửi được đơn / đánh giá).
Bước 2 — Tạo tài khoản thiết bị
Authentication → thẻ Users → Add user.
Email: ví dụ thietbi@quan.local — có thể là email không có thật, chỉ cần đúng dạng email.
Password: đặt mật khẩu mạnh (≥ 8 ký tự, có chữ + số), ví dụ Nuong2026#Bep.
Bấm Add user rồi ghi lại email + mật khẩu ra nơi an toàn — tất cả thiết bị của quán dùng chung tài khoản này.
Bước 3 — Dán bộ luật (Rules) — 2 hộp, dán theo thứ tự
Menu trái → Realtime Database → thẻ Rules.
Dán NGAY hộp "Bước 1 — Chỉ thêm chỉ mục" bên dưới (📋 Sao chép → xoá hết luật cũ trong ô soạn thảo → dán → Publish). Hộp này GIỮ NGUYÊN quyền đọc/ghi như hiện nay nên không chặn máy nào — chỉ thêm chỉ mục để máy mở lại app chỉ tải phần đổi (tiết kiệm băng thông gói miễn phí).
CHỈ KHI mọi máy quán đã nhập email thiết bị (Bước 4) và thấy 🔐 Đã xác thực: dán hộp "Bước 2 — Siết an toàn" (thay toàn bộ hộp Bước 1) → Publish. Từ lúc này, chỉ máy quán đăng nhập email thiết bị mới đọc/ghi được sổ sách; khách quét QR (ẩn danh) chỉ gửi được đơn/phiên/lời báo/đánh giá của mình.
Bước 1 — Chỉ thêm chỉ mục (an toàn, dán ngay được)
Giữ NGUYÊN quyền đọc/ghi hiện tại của node (".read": true, ".write": true ở nuong_rec — đo thật cho thấy node đang mở), chỉ thêm".indexOn": _rev cho mọi bộ (dòng "$c") + time cho completedOrders · serveLogs · tableLogs (Bảng theo dõi); kèm nuong_arc (📦 kho lưu trữ tháng) cùng quyền như vậy. Không chặn máy nào — máy chưa nhập email vẫn đọc/ghi như cũ. Dán xong mở lại app: dòng 🧭 trong 📊 Bảng dung lượng chuyển "server có chỉ mục _rev" → máy mở lại chỉ tải phần đổi thay vì TRỌN dữ liệu. ⚠️ Bộ này chỉ nêu 2 node của PM Nướng; node nào KHÔNG nêu tên sẽ bị Firebase khoá. Nếu database này còn node của app khác, chép thêm luật hiện có của node đó vào trước khi Publish.
Bước 2 — Siết an toàn (chỉ dán khi MỌI máy đã nhập email thiết bị)
⛔ CHỈ dán hộp này khi TẤT CẢ máy quán (iPad order, Bếp, Quầy, thu ngân, máy admin) đã nhập email + mật khẩu thiết bị ở Bước 4 và thấy 🔐 Đã xác thực thiết bị. Máy nào còn ẩn danh sẽ bị server TỪ CHỐI GHI ngay khi Publish — dữ liệu mới chỉ nằm trên máy đó (máy hiện băng đỏ "KHÔNG GHI ĐƯỢC lên máy chủ" và tự đẩy bù khi đã nhập email).
ĐỢT B u6 — bộ luật theo đường dẫn & khuôn dữ liệu: máy quán (đăng nhập email thiết bị → auth.provider == 'password') có toàn quyền đọc/ghi node nuong_rec; khách quét QR (đăng nhập ẩn danh bằng khoá &k= in kèm QR) chỉ ghi được đúng các bản ghi của mình (orders/qr_*, tableSessions/t*, payRequests/pr_*, tableRequests/rq_*, tableLogs/qb_*, feedbacks/fb_* — bắt buộc có _rev hợp lý, không được ghi _del, không được xoá) và chỉ đọc thực đơn (products/combos/productPhotos), single/bankConfig · tableConfig · moduleFlags · billConfig, đơn/phiên/lời báo của chính mình. Mọi bộ sưu tập tài chính (completedOrders, cashBook, payments, debts, dailyClosings, accountProfiles…) khách ẩn danh không đọc, không ghi được. Bộ luật cũ đặt .write: auth != null ở gốc nên ai có mã QR (đăng nhập ẩn danh) cũng xoá được cả node.
⛔ TRƯỚC KHI DÁN bộ luật này: TẤT CẢ máy quán (iPad order, Bếp, Quầy, thu ngân, máy admin) phải đã nhập email + mật khẩu thiết bị ở Bước 4 và thấy 🔐 Đã xác thực thiết bị. Máy quán còn đăng nhập ẩn danh (chưa nhập email) sẽ bị chặn ghi mọi dữ liệu tài chính ngay khi Publish — phần mềm không tự chuyển máy quán sang email, bạn phải làm ở Bước 4. ⚠️ Giới hạn thật thà: luật này chặn theo đường dẫn + khuôn dữ liệu, chưa chặn theo danh tính: người có mã QR bàn 5 vẫn ghi được đơn qr_*/phiên t* của bàn khác (đúng khuôn) — nhưng không thể chạm vào sổ sách, không xoá, không đổi tài khoản nhận tiền. Bước sau (chưa làm): khoá theo danh tính bằng App Check hoặc mã phiên ký, và bỏ hẳn đăng nhập ẩn danh trên máy quán. ⚠️ Luật yêu cầu Bước 1 bật CẢ Email/Password VÀ Anonymous. Sau khi Publish: in lại toàn bộ QR nếu QR cũ chưa có khoá &k=. ❌ KHÔNG để test mode ".read": true, ".write": true — ai có link cũng xoá sạch dữ liệu được.
📶 3 dòng ".indexOn": ["time"] (completedOrders · serveLogs · tableLogs) chỉ để Bảng theo dõi (?m=dash) tải đúng cửa sổ ngày cần xem (đơn từ đầu tháng trước; nhật ký bếp/QR 7 ngày) thay vì trọn bộ — bớt băng thông gói miễn phí. Chưa dán luật thì app vẫn chạy đúng y hệt: Firebase gửi trọn bộ rồi máy tự lọc (không tệ hơn hiện nay). Đồng bộ của các máy quán không dùng index này. 📶 ".indexOn": ["_rev"] (mọi bộ — dòng "$c" cho các bộ không nêu tên, và thêm vào từng bộ có tên) để máy đã mở app trước đó chỉ tải phần đổi từ lần trước (seed theo mốc) thay vì TRỌN dữ liệu mỗi lần mở — trần băng thông gói miễn phí khi dữ liệu xoá/dọn (_del) tích luỹ. Chưa dán thì app tự nhận ra và tải trọn như cũ (đúng y hệt, chỉ tốn băng thông hơn); xem dòng 🧭 trong 📊 Bảng dung lượng.
📦 Nhánh nuong_arc = KHO LƯU TRỮ THÁNG (⚙️ Cài đặt → 📦 Kho lưu trữ): chỉ máy quán (email thiết bị) đọc/ghi; khách ẩn danh không đọc được. Mỗi tháng niêm phong là một phiên bảnv1, v2… — phiên bản đã có meta (đã niêm phong xong) thì không ai sửa/xoá được, niêm phong lại luôn tạo phiên bản mới; chỉ mục idx không xoá được, số phiên bản chỉ tăng. ⚠️ Đang dùng bộ luật CŨ (khoá "$other") mà chưa dán bộ này → niêm phong báo PERMISSION_DENIED, app KHÔNG dọn dữ liệu nào (an toàn, nhưng dữ liệu tiếp tục phình ~5 MB/tháng) — dán lại bộ luật trên rồi Publish.
Bước 4 — Nhập email/mật khẩu vào phần mềm (TẤT CẢ thiết bị)
Mở ⚙️ Cài đặt → phần 🔥 Cấu hình Firebase Realtime Database (ngay phía trên thẻ này).
Nhập 🔐 Email thiết bị (Auth) và Mật khẩu thiết bị đã tạo ở Bước 2.
Bấm 💾 Lưu & Kết nối Firebase — trang sẽ tự tải lại và đăng nhập.
⚠️ Làm bước này trên TẤT CẢ thiết bị: iPad order, máy bếp (KDS), máy thu ngân… Thiết bị nào chưa nhập sẽ không đồng bộ được nữa.
Bước 5 — In lại TOÀN BỘ mã QR (gọi món + Feedback)
Vào ⚙️ Cài đặt → in lại 📱 QR gọi món theo bàn VÀ 💬 QR Feedback.
Mã mới luôn kèm khoá &k= để điện thoại khách tự đăng nhập ẩn danh (cần đã bật Anonymous ở Bước 1).
Thay các mã QR cũ dán trên bàn — mã cũ sẽ KHÔNG gửi được nữa khi luật đã khoá.
Bước 6 — Kiểm tra
Góc trên phải hiện trạng thái đồng bộ bình thường; rê chuột thấy 🔐 Đã xác thực thiết bị.
Thử nhập sai mật khẩu → phần mềm báo 🔐 Đăng nhập Firebase thất bại và chỉ báo đồng bộ chuyển đỏ. Nhập lại đúng là hết.
Nhờ ai đó quét QR Feedback mới và gửi thử 1 đánh giá → máy admin phải nhận được.
Kiểm tra dòng "$other": khối luật ở trên KHOÁ mọi node NGOÀI nuong_rec bằng "$other": { ".read": false, ".write": false }. Muốn chắc là đã Publish đúng bộ này: mở trình duyệt ở chế độ ẩn danh (chưa đăng nhập) và vào <databaseURL>/node_thu_bat_ky.json — phải báo Permission denied. Nếu vẫn đọc/ghi được thì luật đang chạy trên Firebase KHÔNG phải bộ này (chưa dán, hoặc dán rồi quên bấm Publish) → làm lại Bước 3.
Bước 7 — Lưu ý
📊 Bảng theo dõi (mở bằng link ?m=dash trên điện thoại chủ quán) cũng cần nhập email/mật khẩu thiết bị + API Key trong mục Bảo mật nâng cao thì mới đọc được dữ liệu.
KHÔNG chia sẻ email/mật khẩu thiết bị cho người ngoài quán.
Nghi ngờ lộ mật khẩu: Firebase Console → Authentication → Users → ⋮ → Reset password, rồi cập nhật lại trên các thiết bị.
📲 Cài PM Nướng thành app (PWA)
Sau khi cài, PM Nướng sẽ có icon như app thật trên màn hình chính iPad / máy tính và chạy toàn màn hình (không thanh địa chỉ).
Bản này là 1 file duy nhất: manifest + icon đã nhúng thẳng trong file, không cần thư mục phụ nào. Chép file HTML đi đâu cũng chạy.
Cách A — Cài nhanh từ file (không cần internet, không cần hosting)
iPad / iPhone: mở file bằng Safari → nút Chia sẻ ⬆️ → Thêm vào MH chính → Thêm.
PC / Mac: mở file bằng Chrome (hoặc Edge) → biểu tượng Cài đặt ⬇️ bên phải thanh địa chỉ → Cài đặt.
Mở trực tiếp bằng file:// thì trình duyệt không cho cài app ở một số máy. Muốn chắc chắn cài được như app thật (và tự cập nhật cho mọi máy) thì làm Cách B.
Cách B — Đưa lên mạng bằng Netlify (miễn phí)
Tạo 1 thư mục trống, chép file PM Nướng .html vào và đổi tên thành index.html.
Mở app.netlify.com/drop — lần đầu cần đăng ký tài khoản miễn phí (dùng Gmail là nhanh nhất).
Kéo-thả cả thư mục vào trang đó. Vài giây sau nhận được link dạng https://ten-gi-do.netlify.app.
Đổi tên cho dễ nhớ: Site settings → Change site name. Ghi lại link này — đây là địa chỉ app của quán.
Mở link đó trên từng máy rồi cài như Cách A.
Cập nhật phiên bản mới
Chép file HTML mới đè lên (đổi tên thành index.html).
Netlify → mở site của mình → tab Deploys → kéo-thả lại thư mục.
Link giữ nguyên, không phải cài lại gì cả.
Ghi chú quan trọng
Dữ liệu vẫn nằm trong máy + Firebase như trước. Đưa lên mạng chỉ để cài như app và tự cập nhật — không ai xem được dữ liệu của quán qua link này nhiều hơn trước.
⚠️ Chuyển dữ liệu 1 lần: dữ liệu lưu trong máy (localStorage) của bản file cũ KHÔNG tự chạy sang bản mở qua link. Cách chuyển: mở bản cũ → Cài đặt → 📥 Sao lưu; mở bản mới → 📤 Phục hồi file vừa xuất. Làm 1 lần cho mỗi thiết bị.
Offline: dữ liệu vẫn dùng được bình thường khi mất mạng (lưu localStorage/IndexedDB). Riêng việc mở lại vỏ app khi mất mạng cần có file sw.js đặt cùng thư mục trên hosting — bản 1 file không kèm sẵn, thiếu nó phần mềm vẫn chạy bình thường. Nếu hosting có đặt sw.js, mở app một lần bằng link …/?sw=1 để bật tính năng này cho máy đó.
📖 Sổ tay hướng dẫn sử dụng
🔗 Các hạng mục liên quan
🥗 Đồ ăn kèm
📖 Sổ phê duyệt
Thêm mới
5
Xác nhận?
👨🍳👨🍳 BẾP
Kitchen Display System
👨🍳
Chưa có đơn hàng
Phóng to
📖 Sổ tay hướng dẫn sử dụng
🤖AI Trợ lý (DeepSeek)
Xin chào! Tôi là AI trợ lý. Hãy hỏi tôi về dữ liệu kinh doanh, kiểm tra tính chính xác, hoặc bất kỳ câu hỏi nào!
🔥 HTP RESTAURANTBÀN ?
👥
📞
0 mónXem giỏ & gửi order0 ₫
💬
Cảm ơn bạn đã dùng bữa!
Hãy đánh giá trải nghiệm của bạn
🎉
Cảm ơn bạn!
Đánh giá của bạn rất có giá trị với chúng tôi.
🎰 VÒNG QUAY MAY MẮN
Hoá đơn 0 ₫ — quý khách nhận 1 lượt quay trúng thưởng!