// User Manual 01 — Bắt đầu (Đăng nhập + Đổi pwd + Hồ sơ + Dashboard + Sidebar + Chuông) // Style: end-user friendly — chỉ các bước thực hiện đơn giản, không bảng field/error chi tiết. const fs = require('fs'); const path = require('path'); const H = require('./_helpers'); const { h1, h2, h3, p, bullet, num, note, warn, tip, titlePage, buildDoc, Packer } = H; const children = [ ...titlePage( "Hướng dẫn Bắt đầu", "Phần 01: Đăng nhập, Đổi mật khẩu, Hồ sơ, Điều hướng", ), h1("1. Mở hệ thống"), p("Truy cập https://eoffice.solutions.com.vn bằng trình duyệt Chrome / Edge / Cốc Cốc."), p("Tài khoản: email công ty cấp (vd ten.ho@solutions.com.vn). Mật khẩu lần đầu: User@123456."), h1("2. Đăng nhập"), num("Mở https://eoffice.solutions.com.vn"), num("Nhập Email + Mật khẩu"), num("Click \"Đăng nhập\""), note("Lần đầu đăng nhập, hệ thống tự chuyển sang trang Đổi mật khẩu."), h1("3. Đổi mật khẩu lần đầu"), num("Nhập Mật khẩu hiện tại (User@123456)"), num("Nhập Mật khẩu mới (≥ 6 ký tự, có chữ hoa, chữ thường, số, ký tự đặc biệt)"), num("Nhập lại Mật khẩu mới để xác nhận"), num("Click \"Lưu\""), num("Hệ thống đăng xuất → đăng nhập lại bằng mật khẩu mới"), warn("Phải nhớ chính xác mật khẩu mới. Nếu quên, liên hệ admin reset."), h1("4. Cập nhật hồ sơ cá nhân"), num("Click avatar góc trên phải → \"Hồ sơ của tôi\""), num("Sửa Họ tên / Chức vụ / Số điện thoại"), num("Click \"Lưu\""), note("Email + Phòng ban + Vai trò là read-only, do admin gán. Liên hệ admin nếu cần đổi."), h1("5. Dashboard - Trang chủ"), p("Sau khi đăng nhập, Dashboard hiển thị 5 thẻ:"), bullet("Bản nháp đang soạn — HĐ user là Drafter, ở phase Đang soạn thảo"), bullet("Chờ tôi duyệt — HĐ ở phase mà role user được duyệt"), bullet("Sắp đến hạn — HĐ có SLA trong 2 ngày tới"), bullet("Quá hạn — HĐ đã quá SLA chưa xử lý"), bullet("Tổng giá trị nháp — tổng giá trị HĐ đang soạn"), p("Click thẻ → mở danh sách tương ứng."), h1("6. Sidebar - Menu trái"), p("Menu 3 cấp:"), num("Cấp 1: Hợp đồng / Phiếu duyệt NCC / Ngân sách / Báo cáo / ..."), num("Cấp 2: 7 loại HĐ (Thầu phụ, Giao khoán, NCC, Dịch vụ, Mua bán, Nguyên tắc NCC, Nguyên tắc DV)"), num("Cấp 3: 3 thao tác (Danh sách / Tạo mới / Duyệt)"), tip("Click cấp 1 → mở rộng. Khi mở 1 nhóm, các nhóm khác tự đóng."), h1("7. Chuông thông báo"), p("Icon chuông góc trên phải. Badge số đỏ = số notification chưa đọc."), num("Click chuông → popup 10 notification mới nhất"), num("Click 1 notification → đánh dấu đã đọc + chuyển đến trang HĐ liên quan"), num("Click \"Đánh dấu tất cả đã đọc\" để clear badge"), note("Notification mới đẩy realtime — không cần refresh trang."), h1("8. Đăng xuất"), num("Click avatar góc trên phải"), num("Click \"Đăng xuất\""), p("Hệ thống clear session, chuyển về trang Đăng nhập."), h1("9. Khi gặp lỗi"), bullet("Sai mật khẩu nhiều lần → tài khoản bị khóa 30 phút (auto unlock)"), bullet("Trang trắng / không response → Ctrl + Shift + R (hard refresh)"), bullet("Sidebar trống → liên hệ admin xác nhận quyền"), bullet("Lỗi không tự xử lý → email admin@solutions.com.vn kèm screenshot + URL"), ]; const doc = buildDoc( "User Manual - 01 Bắt đầu", "SOLUTION_ERP - User Manual - 01 Bắt đầu", children, ); const outPath = path.join(__dirname, 'user', '01-Bat-dau.docx'); Packer.toBuffer(doc).then(buf => { fs.writeFileSync(outPath, buf); console.log('✅ Generated:', outPath); console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB'); });