User feedback: "ko cần quá đầy đủ chi tiết, cho end-user họ làm". Rewrite 7 generator scripts theo style end-user friendly: - Bỏ field validation table 5 cột (Tên field / Kiểu / Bắt buộc / Validation / Ví dụ) - Bỏ error troubleshoot table 3 cột (Lỗi / Nguyên nhân / Cách xử lý) - Bỏ FAQ chi tiết 8 câu (giữ 1 chương "Khi gặp lỗi" 4-5 bullet) - Bỏ phím tắt table - Giữ: tổng quan ngắn, numbered steps đơn giản, note/warn/tip chỉ khi critical 7 file generator (đã refactor dùng _helpers.js shared): - _gen-user-01: Bắt đầu (login + đổi pwd + hồ sơ + dashboard + sidebar + chuông) - _gen-user-02: Hợp đồng (7 loại + tạo + sửa + xóa + đính kèm + comment) - _gen-user-03: Duyệt Workflow (9 phase + 2-stage NV/TPB + reject + resume) - _gen-user-04: Phiếu Duyệt NCC (PE) (A/B + matrix báo giá + winner + 4PB + tạo HĐ) - _gen-user-05: Ngân sách (tạo + hạng mục + WF 3-step + liên kết HĐ/PE) - _gen-user-06: Cheatsheet 7 loại HĐ (mỗi loại 1 page: use case + field + format mã) - _gen-admin-02: Quản lý Users-Roles (tạo + role + reset + lock + bypass review S9) Setup: package.json + npm install docx@9.5.0 + script "gen:all". Output sizes: - 01: 12.1 KB (cũ 21.7 KB → giảm ~44%) - 02: 12.4 KB - 03: 12.2 KB - 04: 12.4 KB - 05: 12.0 KB - 06: 12.8 KB - admin-02: 12.7 KB - Tổng ~86 KB cho 7 file đầy đủ chức năng cốt lõi. Note: ContractType label "Phương án" → "Giải pháp" (đã rebrand session 3). 2-stage dept approval mention ở Phần 03 + admin-02 (Migration 16 Session 8/9). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
101 lines
5.2 KiB
JavaScript
101 lines
5.2 KiB
JavaScript
// Admin Manual 02 — Quản lý Users + Roles (cho QTV)
|
||
// Style: end-user friendly — các bước quản trị cơ bản.
|
||
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 Quản lý Users + Roles",
|
||
"Phần 02 (Admin): Tạo User, Gán Role, Reset Password, Khóa/Mở, Bypass Review",
|
||
),
|
||
|
||
h1("1. Truy cập trang Users"),
|
||
num("Đăng nhập admin tại https://admin.solutions.com.vn"),
|
||
num("Sidebar → Hệ thống → Users (hoặc URL /system/users)"),
|
||
num("Trang hiển thị danh sách user + filter + search"),
|
||
|
||
h1("2. Tạo User mới"),
|
||
num("Click \"Thêm user\" góc trên phải"),
|
||
num("Điền form: Email công ty / Họ tên / Phòng ban / Chức vụ / Password tạm"),
|
||
num("Tick các Vai trò gán cho user (1 user có thể có nhiều role)"),
|
||
num("Click \"Tạo\""),
|
||
note("Password tạm khuyến nghị: User@123456. User sẽ bị bắt đổi khi đăng nhập lần đầu."),
|
||
|
||
h1("3. Sửa thông tin User"),
|
||
num("Tại danh sách, click icon Pencil ở dòng user"),
|
||
num("Sửa Họ tên / Phòng ban / Chức vụ / Active"),
|
||
num("Click \"Lưu\""),
|
||
warn("Email là read-only — KHÔNG đổi được. Nếu cần đổi email, phải xóa user và tạo lại."),
|
||
|
||
h1("4. Gán / Sửa Roles"),
|
||
num("Click icon Shield ở dòng user"),
|
||
num("Tick / Bỏ tick các role"),
|
||
num("Click \"Lưu\""),
|
||
p("12 role hệ thống: Admin / Drafter / DeptManager (TPB) / ProjectManager / Procurement / CostControl / Finance / Accounting / Equipment / Director / AuthorizedSigner / HrAdmin."),
|
||
tip("User được gán Admin role → bypass mọi permission check (dùng cho test hoặc emergency)."),
|
||
|
||
h1("5. Reset Password"),
|
||
num("Click icon Key ở dòng user"),
|
||
num("Nhập password mới (≥ 6 ký tự)"),
|
||
num("Click \"Reset\""),
|
||
p("User bị logout khỏi mọi session, phải đăng nhập lại với password mới."),
|
||
warn("Báo password mới cho user qua kênh an toàn (gặp trực tiếp / cuộc gọi). KHÔNG gửi qua email không mã hóa."),
|
||
|
||
h1("6. Khóa / Mở khóa User"),
|
||
num("User bị khóa tự động khi đăng nhập sai 5 lần liên tiếp"),
|
||
num("Khi đó icon Lock màu cam hiện ở dòng user"),
|
||
num("Admin click icon Unlock để mở khóa thủ công"),
|
||
bullet("Hoặc đợi 30 phút auto unlock"),
|
||
|
||
h1("7. Vô hiệu hóa / Kích hoạt User"),
|
||
num("Click icon X (đỏ) hoặc CheckCircle (xanh) ở cột actions"),
|
||
num("Toggle trạng thái Active"),
|
||
p("User Inactive vẫn còn trong DB nhưng KHÔNG đăng nhập được. Dùng khi nhân viên nghỉ việc."),
|
||
|
||
h1("8. Bypass Review (mới — Migration 16)"),
|
||
p("Khi quy trình duyệt 2-cấp phòng ban, mặc định: NV duyệt = Review only, phải TPB Confirm thì phase mới chuyển. \"Bypass Review\" cho phép 1 NV cụ thể duyệt = Confirm trực tiếp (skip Review)."),
|
||
num("Tại danh sách user, click icon ShieldCheck ở dòng user"),
|
||
num("Icon đổi màu fuchsia + cột \"Bypass\" hiện badge \"bypass\""),
|
||
num("Lần duyệt sau, NV này được Stage = Confirm + IsBypassed = true (audit)"),
|
||
bullet("Use case: phòng ban không có TPB, hoặc TPB ủy quyền cho 1 NV cụ thể"),
|
||
bullet("Click lần nữa để TẮT bypass"),
|
||
|
||
h1("9. Tìm + Filter user"),
|
||
bullet("Search: tìm theo Email / Họ tên"),
|
||
bullet("Phân trang 20 user/page"),
|
||
tip("Bookmark URL nếu cần truy cập nhanh: /system/users?search=tra.bui"),
|
||
|
||
h1("10. Quản lý Roles"),
|
||
num("Sidebar → Hệ thống → Roles (URL /system/roles)"),
|
||
num("Xem 12 role hệ thống: Mã (ShortName) + Tên đầy đủ + Mô tả"),
|
||
num("(Tùy chọn) Tạo role custom ngoài 12 hardcoded — click \"Thêm role\""),
|
||
warn("Sửa role hệ thống có thể ảnh hưởng quy trình duyệt. Test kỹ trước khi đổi."),
|
||
|
||
h1("11. Quản lý Permissions"),
|
||
num("Sidebar → Hệ thống → Permissions (URL /system/permissions)"),
|
||
num("Trang 3-panel: Role list trái | Matrix Menu × CRUD giữa | Stats phải"),
|
||
num("Chọn 1 role → Matrix hiển thị quyền theo từng menu key"),
|
||
num("Tick / Bỏ tick CRUD flag → tự động lưu (auto-save)"),
|
||
note("User cần logout / login lại để thấy menu mới sau khi admin đổi quyền."),
|
||
|
||
h1("12. Khi gặp lỗi"),
|
||
bullet("Tạo user báo \"Email đã tồn tại\" → kiểm tra danh sách (kể cả Inactive)"),
|
||
bullet("Reset password không tác dụng → check user IsActive = true"),
|
||
bullet("User báo không thấy menu nào → kiểm tra Permissions matrix cho role tương ứng"),
|
||
bullet("Bypass Review không có hiệu lực → user phải có Phòng ban gán + role không phải DeptManager"),
|
||
];
|
||
|
||
const doc = buildDoc(
|
||
"Admin Manual - 02 Quản lý Users + Roles",
|
||
"SOLUTION_ERP - Admin Manual - 02 Quản lý Users-Roles",
|
||
children,
|
||
);
|
||
|
||
const outPath = path.join(__dirname, 'admin', '02-Quan-ly-Users-Roles.docx');
|
||
Packer.toBuffer(doc).then(buf => {
|
||
fs.writeFileSync(outPath, buf);
|
||
console.log('✅ Generated:', outPath);
|
||
console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB');
|
||
});
|