Files
solution-erp/docs/_user-guide/_gen-admin-02.js
pqhuy1987 16c2c9c79e [CLAUDE] Docs: User Manual 7 file rewrite compact cho end-user
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>
2026-05-06 17:06:01 +07:00

101 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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');
});