AssetHub Tài liệu

Câu hỏi thường gặp

Tôi có thể chạy AssetHub trên gói Hostinger Single rẻ nhất không?

Có — AssetHub tương thích hoàn toàn với Hostinger Single (~$2.99/tháng). Gói Single đã có PHP 8.3, MySQL, Cron Jobs gốc và SSL miễn phí — mọi thứ AssetHub cần. Không cần SSH, Composer hay dòng lệnh. Xem mục Cài đặt Hostinger để có hướng dẫn từng bước.

Tôi có cần kỹ năng kỹ thuật để cài đặt không?

Không. Trình cài đặt qua web xử lý tất cả: kiểm tra yêu cầu, thiết lập cơ sở dữ liệu, migrate, và tạo tài khoản admin. Chỉ cần upload file, mở /install trong trình duyệt và làm theo wizard.

Email tự động (cảnh báo bảo hành/bảo trì) hoạt động thế nào?

AssetHub dùng scheduler của Laravel. Bạn chỉ cần cấu hình một cron job chạy mỗi phút, Laravel sẽ tự điều phối từng tác vụ vào đúng thời điểm (hàng ngày 08:00, hàng tháng, v.v.). Với Hostinger, cấu hình tại hPanel → Nâng cao → Cron Jobs. Nếu host không có cron, dùng URL Cron trong app cùng dịch vụ miễn phí cron-job.org.

Hệ thống hỗ trợ những phương pháp khấu hao nào?

Ba phương pháp: Đường thẳng (khấu hao đều hàng năm), Số dư giảm dần (nhanh hơn, thường dùng cho thuế), và Theo sản lượng (theo mức sử dụng, dành cho thiết bị sản xuất). Giá trị tài sản được làm mới tự động vào ngày 1 hàng tháng.

Trình quét QR có hoạt động trên điện thoại không?

Có — dùng camera trình duyệt qua html5-qrcode và chạy được trên mọi trình duyệt điện thoại/máy tính bảng/desktop hiện đại. Yêu cầu duy nhất là HTTPS. Hostinger cung cấp SSL miễn phí qua Let's Encrypt nên chạy ngay được.

Tôi có thể thêm trường riêng mà không cần code không?

Có. Admin → Trường tùy chỉnh cho phép thêm không giới hạn thuộc tính (văn bản, số, ngày, lựa chọn, vùng văn bản, tệp, hộp kiểm), giới hạn theo từng danh mục, đánh dấu bắt buộc và sắp xếp lại bằng kéo-thả — tất cả từ giao diện.

AssetHub hỗ trợ bao nhiêu ngôn ngữ?

10 ngôn ngữ sẵn có: Tiếng Anh, Tiếng Việt, Tây Ban Nha, Pháp, Đức, Trung, Nhật, Bồ Đào Nha (BR), Nga và Ả Rập (có hỗ trợ RTL đầy đủ). Bản dịch có thể chỉnh sửa từ Admin → Translations.

Tổng quan

AssetHub là hệ thống quản lý tài sản CNTT hoàn chỉnh, xây dựng bằng Laravel 11, Vue 3 và Tailwind CSS. Nó giúp tổ chức theo dõi vòng đời thiết bị, quản lý cấp phát, lên lịch bảo trì, tính khấu hao và tạo báo cáo chi tiết.

Theo dõi bằng mã QR

Tự sinh mã QR cho mọi tài sản. Quét bằng camera trên trình duyệt.

Khấu hao

3 phương pháp: đường thẳng, số dư giảm dần, theo sản lượng.

Trường tùy chỉnh

Thêm không giới hạn thuộc tính — văn bản, ngày, lựa chọn, tệp, hộp kiểm.

Webhook

15 loại sự kiện với ký HMAC và tự động retry.

Nhật ký kiểm toán

Ghi lại mọi thay đổi với trình xem diff đầy đủ.

Báo cáo

8 báo cáo có biểu đồ, xuất Excel và PDF.

Yêu cầu máy chủ

  • PHP 8.2 trở lên
  • MySQL 5.7+ hoặc MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ và npm 9+
  • Máy chủ web: Apache hoặc Nginx

PHP Extension bắt buộc

  • OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo

Dung lượng đĩa

Tối thiểu ~ 200 MB. Cần thêm dung lượng cho ảnh tài sản và tệp đính kèm tài liệu.

Cài đặt

Lựa chọn A — Trình cài đặt qua web (Khuyến nghị)

  1. Upload file dự án lên máy chủ web.
  2. Trỏ document root của tên miền tới public/.
  3. Đặt quyền: storage/bootstrap/cache/ phải ghi được (chmod 775).
  4. Sao chép .env.example thành .env rồi chạy php artisan key:generate.
  5. Mở https://yourdomain.com/install trong trình duyệt.
  6. Làm theo wizard — Requirements → Database → Migrate → Admin Account → Done.

Lựa chọn B — Cài đặt qua CLI

# 1. Cài dependency
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Cấu hình môi trường
cp .env.example .env
php artisan key:generate

# 3. Sửa .env để đặt thông tin DB
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Tạo bảng và seed dữ liệu ban đầu
php artisan migrate --seed

# 5. Tạo storage symlink cho upload
php artisan storage:link

# 6. Cache config cho production
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Đánh dấu đã cài đặt
echo "Installed" > storage/installed.lock
Cấu hình máy chủ web: Document root phải trỏ tới thư mục public/. Với Apache, file .htaccess đi kèm xử lý URL rewriting. Với Nginx, xem hướng dẫn triển khai Laravel.

Wizard Bước 2 — Cấu hình cơ sở dữ liệu

Khi wizard chạy đến Bước 2, bạn cần nhập thông tin kết nối MySQL của cơ sở dữ liệu đã tạo trong bảng điều khiển hosting. Database phải tồn tại sẵn (có thể trống — bước tiếp theo sẽ tạo các bảng).

TrườngMặc định / Ví dụGhi chú
Host127.0.0.1Đúng cho 99% shared hosting (Hostinger, cPanel, Plesk). Giữ nguyên trừ khi hosting cung cấp hostname MySQL riêng (managed DB như AWS RDS, DigitalOcean Managed Database).
Port3306Cổng MySQL chuẩn. Chỉ đổi nếu provider dùng cổng khác (hiếm).
Tên cơ sở dữ liệuuXXXXXX_assethubTên đầy đủ hiển thị trong bảng điều khiển hosting. Hầu hết shared hosting có prefix theo user ID (ví dụ Hostinger: u287094729_assethub).
Tên đăng nhậpuXXXXXX_assethubTài khoản MySQL có quyền trên database ở trên. KHÔNG dùng root — shared hosting không cho phép.
Mật khẩu(mật khẩu DB của bạn)Mật khẩu bạn đặt hoặc copy khi tạo user MySQL. Hầu hết hosting chỉ hiện 1 lần lúc tạo — dùng "View / Reset" nếu không lưu lại.

Tìm thông tin DB ở đâu theo từng loại hosting

  • Hostinger: hPanel → Databases → Management → click vào database. Trang chi tiết hiện tên, username và nút "Show password".
  • cPanel: cPanel → MySQL Databases. Danh sách database ở trên, danh sách user ở dưới. Dùng "Change Password" nếu cần.
  • Plesk: Plesk → Databases → click tên database. Trang chi tiết hiện credentials và có nút reset password.
  • DirectAdmin: DirectAdmin → MySQL Management → click vào database. Credentials và reset password nằm ở trang chi tiết.
  • DB ngoài / managed: AWS RDS, DigitalOcean Managed Database, v.v. Dùng hostname tùy chỉnh, port (thường là 3306 nhưng nên kiểm tra), tên DB, user và password từ cloud console. Đảm bảo IP của server được whitelist trong firewall DB.

Lỗi thường gặp và cách sửa

Thông báo lỗiNguyên nhân và cách sửa
SQLSTATE[HY000] [1045] Access deniedSai username hoặc password, hoặc user không có quyền trên database này. Kiểm tra kỹ chính tả (bao gồm cả prefix user trên shared host). Reset password trong bảng điều khiển hosting nếu không chắc.
SQLSTATE[HY000] [1049] Unknown databaseTên database sai, hoặc bạn chưa tạo database trong bảng điều khiển. Tạo trước, rồi nhập lại tên chính xác (bao gồm prefix).
SQLSTATE[HY000] [2002] Connection refusedKhông kết nối được tới MySQL server. Kiểm tra Host và Port. Trên shared host thử localhost thay vì 127.0.0.1 hoặc ngược lại. Với managed DB, đảm bảo IP server đã được whitelist.
SQLSTATE[42S02] Base table not found: sessionsXảy ra khi SESSION_DRIVER=database hoặc CACHE_STORE=database được set trong .env trước khi tables tồn tại. Sửa .env đổi cả 2 sang file, save, rồi reload wizard. Có thể đổi lại database sau khi install xong nếu muốn.
could not find driverThiếu hoặc tắt PHP pdo_mysql extension. Bật trong bảng điều khiển hosting (PHP Configuration → Extensions). Trên Hostinger: hPanel → Advanced → PHP Configuration → tab PHP Extensions.
Mẹo: Trường Host và Port đã pre-fill với giá trị phổ biến nhất (127.0.0.13306) — giữ nguyên trên shared hosting. Bạn chỉ cần gõ Database name, Username và Password. Bấm Test & Save → để kiểm tra kết nối và sang Bước 3.

Localhost (Phát triển cục bộ)

Hướng dẫn nhanh để chạy AssetHub trên máy tính của bạn cho mục đích kiểm thử hoặc phát triển trước khi triển khai production. Chọn môi trường phù hợp với hệ điều hành của bạn.

Khuyến nghị: Laravel Herd là lựa chọn nhanh nhất trên macOS và Windows — không cần Docker, không cần cấu hình Apache/MySQL thủ công. XAMPP và Laragon là các lựa chọn miễn phí tốt nếu bạn quen stack truyền thống hơn.

Lựa chọn 1 — Laravel Herd (Khuyến nghị, macOS & Windows)

Laravel Herd là môi trường local chính thức từ đội Laravel — miễn phí, native, không Docker. Đi kèm PHP 8.2/8.3/8.4, Nginx, và (trong Herd Pro) MySQL/Redis.

  1. Tải và cài Laravel Herd từ herd.laravel.com.
  2. Đặt thư mục dự án AssetHub vào ~/Herd/ (macOS) hoặc %USERPROFILE%\Herd\ (Windows). Herd tự tạo domain .test — ví dụ http://assethub.test.
  3. Mở Herd → Sites và xác nhận phiên bản PHP là 8.2 hoặc 8.3. Chuột phải site → Secure để bật HTTPS (cần cho QR scanner).
  4. Tạo cơ sở dữ liệu MySQL. Với Herd Pro, vào Services → MySQL → Open in TablePlus. Không có Pro thì cài MySQL Community hoặc dùng SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Sao chép .env.example thành .env, điền thông tin DB, rồi chạy php artisan key:generate ở gốc dự án.
  6. Mở http://assethub.test/install trong trình duyệt và làm theo wizard.

Lựa chọn 2 — XAMPP (Windows, macOS, Linux)

XAMPP gói sẵn Apache, MySQL/MariaDB và PHP. Miễn phí, đa nền tảng. Chú ý chọn phiên bản PHP 8.2 trở lên.

  1. Tải XAMPP 8.2+ từ apachefriends.org và cài đặt.
  2. Sao chép dự án AssetHub vào C:\xampp\htdocs\AssetHub\ (Windows) hoặc /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Mở XAMPP Control Panel và khởi động ApacheMySQL. Nếu port bị chiếm, vào Config → service.conf để chuyển Apache sang 8080.
  4. Vào http://localhost/phpmyadminNew → tạo database tên assethub với collation utf8mb4.
  5. Trong thư mục dự án: sao chép .env.example thành .env, đặt DB_DATABASE=assethub, DB_USERNAME=root, để trống DB_PASSWORD (mặc định XAMPP). Chạy php artisan key:generate.
  6. Truy cập http://localhost/AssetHub/public/install để chạy wizard cài đặt.
URL gọn không có /public/: tạo virtual host trong C:\xampp\apache\conf\extra\httpd-vhosts.conf trỏ DocumentRoot đến thư mục public/ của dự án, rồi thêm 127.0.0.1 assethub.local vào file hosts.

Lựa chọn 3 — Laragon (Windows)

Laragon là stack Windows portable thiết kế cho Laravel — tự sinh vhost, URL gọn, MySQL/MariaDB và HeidiSQL đi kèm.

  1. Tải Laragon Full từ laragon.org và cài đặt.
  2. Trong Laragon: Menu → PHP → Version — chuyển sang PHP 8.2 hoặc 8.3.
  3. Sao chép dự án AssetHub vào C:\laragon\www\AssetHub\.
  4. Bấm Start All. Laragon tự tạo vhost: http://assethub.test (trỏ đến thư mục public/).
  5. Mở HeidiSQL (đi kèm) → tạo database assethub. Thông tin mặc định: user root, password để trống.
  6. Sửa .env với thông tin DB, chạy php artisan key:generate, rồi truy cập http://assethub.test/install.

Lựa chọn 4 — Máy chủ PHP có sẵn (không cần web server)

Lựa chọn đơn giản nhất: Laravel đi kèm artisan serve, khởi động một development PHP server. Không cần Apache hay Nginx. Tốt nhất cho test nhanh.

# Cài dependency và cấu hình
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Chạy migration và seed dữ liệu ban đầu
php artisan migrate --seed

# Khởi động dev server
php artisan serve
# Rồi truy cập: http://127.0.0.1:8000/install

Các vấn đề thường gặp khi chạy localhost

QR scanner không mở camera trên http://

API camera trình duyệt yêu cầu HTTPS, có một ngoại lệ: http://localhosthttp://127.0.0.1 được xem là secure context. Nếu bạn truy cập AssetHub qua IP LAN (ví dụ http://192.168.1.10), camera sẽ bị từ chối. Dùng localhost cho dev, hoặc bật HTTPS qua Herd / mkcert.

Permission denied trên storage (macOS / Linux)

Nếu gặp lỗi khi app ghi log hoặc cache, sửa quyền: chmod -R 775 storage bootstrap/cache. Trên Windows thường không cần.

Port đang được dùng

Nếu port 8000 đã bị app khác chiếm, dùng port khác:

php artisan serve --port=8001

Test email cục bộ

SMTP thật thường không có trên localhost. Hai lựa chọn an toàn: (1) đặt MAIL_MAILER=log trong .env — email được ghi vào storage/logs/laravel.log thay vì gửi; hoặc (2) dùng Mailtrap / MailHog để bắt email gửi đi vào hộp inbox giả.

MAIL_MAILER=log
# Mọi email được ghi vào storage/logs/laravel.log

Frontend assets (Vite / Tailwind)

Frontend Vue/Tailwind của AssetHub đã được build sẵn trong gói. Nếu bạn sửa Vue component hay Tailwind config thì cần Node.js 18+:

npm install
npm run dev    # Hot-reload khi phát triển
npm run build  # Build production (chạy trước khi deploy)

Triển khai trên Hostinger Single (Shared Hosting)

Đây là cách được khuyến nghị cho người không có VPS hoặc kinh nghiệm kỹ thuật. AssetHub tương thích hoàn toàn với gói Hostinger Single Web Hosting rẻ nhất (~$2.99/tháng). Không cần SSH, Composer hay dòng lệnh — Single đã có cron jobs gốc, PHP 8.3 và SSL miễn phí.

Đã kiểm thử trên: các gói Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, Cron Jobs gốc có ở mọi tier).

Bước 1 — Chuẩn bị hosting

  1. Đăng nhập Hostinger hPanel.
  2. Vào Hosting → Quản lý cho tên miền của bạn.
  3. Đặt phiên bản PHP thành 8.2 hoặc 8.3 qua Nâng cao → Cấu hình PHP.
  4. Đảm bảo các PHP extension này được bật (thường mặc định đã có):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Bước 2 — Tạo cơ sở dữ liệu MySQL

  1. Trong hPanel, vào Cơ sở dữ liệu → MySQL Databases.
  2. Bấm Tạo cơ sở dữ liệu mới.
  3. Ghi lại 3 giá trị này:
    • Tên cơ sở dữ liệu — ví dụ u123_AssetHub
    • Tên đăng nhập — ví dụ u123_admin
    • Mật khẩu — được tự sinh, giữ kỹ

Bước 3 — Upload file

  1. Vào Tệp → File Manager trong hPanel.
  2. Điều hướng tới public_html/ (đây là gốc của tên miền).
  3. Xóa mọi file index.html hoặc default.php mặc định trong thư mục này.
  4. Bấm Upload Files và tải toàn bộ source.zip từ gói cài đặt.
    Hoặc tải trực tiếp nội dung thư mục /source/ qua FTP nếu bạn muốn.
  5. Nếu upload ZIP, chuột phải → Giải nén. Sau khi giải nén, tất cả file phải nằm ở gốc public_html/.
  6. Xác nhận public_html/ chứa: app/, public/, vendor/, .htaccess, index.php (trong public/), .env, v.v.
Quan trọng: Đảm bảo file .htaccess tồn tại ở gốc public_html/. Nó chứa các rule URL rewriting. Nếu File Manager ẩn các file ẩn, bấm Cài đặt → Hiện file ẩn.

Bước 4 — Chạy trình cài đặt

  1. Mở trình duyệt và truy cập https://yourdomain.com/install.
  2. Bạn sẽ thấy AssetHub Installer.
  3. Bước 1: Requirements — Mọi mục phải pass (xanh). Nếu có mục lỗi, liên hệ Hostinger support để bật PHP extension còn thiếu.
  4. Bước 2: Database — Nhập thông tin từ Bước 2 ở trên:
    • Host: localhost
    • Port: 3306
    • Database: u123_AssetHub
    • Username: u123_admin
    • Mật khẩu: (do Hostinger tự sinh)
  5. Bước 3: Migrate — Bấm "Run Migrations & Seed". Mất ~10 giây. Đừng refresh.
  6. Bước 4: Admin — Tạo tài khoản quản trị. Dùng mật khẩu mạnh.
  7. Xong! — Bạn sẽ thấy URL Cron (lưu lại!) và nút đăng nhập.

Bước 5 — Cài cảnh báo email tự động qua Hostinger Cron

AssetHub dùng scheduler của Laravel cho các tác vụ nền: cảnh báo bảo hành, nhắc bảo trì, hạn tài liệu, refresh khấu hao và checkout quá hạn. Cấu hình một cron job duy nhất trong hPanel rồi Laravel sẽ quyết định chạy tác vụ nào lúc nào.

  1. Trong hPanel, vào Nâng cao → Công việc định kỳ.
  2. Bấm Tạo Cron job.
  3. Chọn loại: Custom (không phải "PHP" — vì cần truyền tham số).
  4. Nhập lệnh sau (thay uXXXXXX bằng username Hostinger của bạn):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Mẹo: mở File Manager, tìm file artisan (gốc dự án), chuột phải → Thuộc tính để sao chép đường dẫn đầy đủ.
  5. Đặt lịch Mỗi phút — cả năm trường (Minute, Hour, Day, Month, Day of week) đặt thành *.
  6. Bấm Lưu.

Xong — AssetHub bây giờ tự gửi nhắc checkout quá hạn, cảnh báo bảo trì, hạn tài liệu, cảnh báo bảo hành, và refresh giá trị khấu hao tài sản tự động. Laravel tự lên lịch từng job ở tần suất đúng (hàng ngày 08:00, hàng tháng, v.v.).

Document root đặt thành public_html/public/? Không sao — code Laravel vẫn nằm ở gốc public_html/ nên đường dẫn cron giữ là /home/uXXXX/public_html/artisan (đừng thêm /public/).
Phương án dự phòng cho host không có cron: Nếu bạn không dùng Hostinger hoặc nhà cung cấp không có cron jobs, AssetHub cũng cung cấp URL kích hoạt webhook.
  1. Đăng nhập admin → Cài đặt → tab Hệ thống → sao chép Cron URL.
  2. Đăng ký miễn phí tại cron-job.org.
  3. Tạo cronjob, dán URL, đặt Mỗi 15 phút, lưu.

Bước 6 — Cấu hình email (SMTP)

Hostinger cung cấp tài khoản email kèm theo từng gói. Để dùng cho thông báo của AssetHub:

  1. Trong hPanel, vào Email → Tài khoản email và tạo một tài khoản (ví dụ noreply@yourdomain.com).
  2. Chỉnh sửa file .env trong public_html/ qua File Manager:
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.hostinger.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Lưu file.
  4. Đăng nhập AssetHub → Cài đặt → tab Email → Gửi Test Email. Nếu bạn nhận được là xong.
Giới hạn SMTP trên gói Single: Hostinger Single cho phép ~100 email gửi đi mỗi giờ. Với triển khai lớn hơn, dùng nhà cung cấp chuyên dụng như SendGrid, Mailgun hoặc Postmark (có gói miễn phí).

Sự cố thường gặp trên Hostinger Single

"500 Internal Server Error" sau khi upload

  • Xác nhận .htaccess tồn tại ở gốc public_html/ và chứa các rule rewrite.
  • Xác nhận phiên bản PHP được đặt thành 8.2 hoặc 8.3 trong hPanel.
  • Kiểm tra storage/logs/laravel.log qua File Manager để xem lỗi thật.

"Permission denied" khi upload

Hostinger thường tự đặt quyền đúng, nhưng nếu không:

  • Chuột phải storage/ trong File Manager → Quyền → đặt thành 755 đệ quy.
  • Tương tự với bootstrap/cache/.

Trình quét QR không mở được camera

API camera của trình duyệt yêu cầu HTTPS. Hostinger cung cấp SSL miễn phí qua Let's Encrypt — bật trong hPanel ở mục SSL → Quản lý.

Email theo lịch không được gửi

  • Trong hPanel → Cron Jobs → kiểm tra cột Last run ở entry cron. Nếu trống, cron chưa chạy — xác nhận đường dẫn artisan đúng.
  • Test lệnh thủ công: mở Terminal trong hPanel (nếu có) và chạy lệnh cron. Nếu lỗi, thông báo lỗi sẽ chỉ rõ vấn đề (sai phiên bản PHP, sai đường dẫn, v.v.).
  • Xác nhận SMTP được cấu hình đúng (Cài đặt → Email → Gửi Test).
  • Kiểm tra storage/logs/laravel.log tìm lỗi scheduler.

Hiệu năng chậm

Hostinger Single dùng chung CPU/RAM. Nếu nhóm bạn hơn 20 người, cân nhắc:

  • Nâng cấp lên Premium (~$3.99/tháng) — server nhanh hơn, nhiều tài nguyên hơn, nhiều cơ sở dữ liệu.
  • Hoặc Business (~$5.99/tháng) — tài nguyên riêng, backup hàng ngày, môi trường staging.

Cấu hình

Tệp .env

KhóaMô tảVí dụ
APP_NAMETên ứng dụng hiển thị trên thanh tiêu đềAssetHub
APP_URLURL công khai của bản cài đặthttps://assets.example.com
APP_DEBUGĐặt false trên productionfalse
DB_*Thông tin kết nối cơ sở dữ liệumysql, 127.0.0.1, 3306, ...
MAIL_MAILERMail driversmtp, log, mailgun
MAIL_HOSTHostname máy chủ SMTPsmtp.gmail.com
MAIL_PORTPort SMTP587
MAIL_USERNAMEUsername SMTPyour@email.com
MAIL_PASSWORDMật khẩu SMTP hoặc app token**********
MAIL_FROM_ADDRESSĐịa chỉ From mặc địnhnoreply@example.com

Cài đặt trong app

Hầu hết các tùy chọn không nhạy cảm đều cấu hình được từ Admin → Cài đặt:

  • Chung: tên/email/điện thoại công ty, tiền tố asset tag
  • Email: gửi test email để xác nhận SMTP
  • Thông báo: ngưỡng cảnh báo bảo hành, cửa sổ nhắc bảo trì
  • Bản địa hóa: múi giờ, định dạng ngày, tiền tệ

Hỗ trợ đa ngôn ngữ

AssetHub đi kèm sẵn 10 ngôn ngữ, bao gồm cả tiếng Ả Rập (RTL). Người dùng đổi ngôn ngữ qua dropdown cờ ở góc trên bên phải.

Các ngôn ngữ có sẵn

Ngôn ngữHướng
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL

Cách chuyển ngôn ngữ

  1. Click vào icon cờ ở góc trên bên phải để mở dropdown.
  2. Chọn ngôn ngữ từ danh sách.
  3. Trang sẽ reload; toàn bộ nhãn UI, ngày tháng và định dạng tiền tệ chuyển theo.
  4. Lựa chọn được lưu cả vào tài khoản người dùng và cookie (1 năm).
Đừng mở file .html của app trực tiếp. AssetHub là một ứng dụng Laravel + Vue server-side — việc đổi ngôn ngữ gửi POST đến /locale/{code}, chỉ hoạt động khi có PHP server đang chạy. Luôn truy cập qua domain thật (production) hoặc http://localhost:8000 (dev với php artisan serve). File documentation như file này thì hoàn toàn standalone, mở trực tiếp được.

Thêm ngôn ngữ tùy chỉnh (admin)

Admin → Cài đặt → Bản dịch:

  • Click "Thêm Locale" — nhập mã (vd th cho tiếng Thái), tên hiển thị, tên bản ngữ, cờ, hướng, và chọn ngôn ngữ gốc để copy bản dịch.
  • Sửa bản dịch trực tiếp trong Translation Editor, hoặc qua CSV import/export.
  • Bản dịch lưu trong DB tự động override bản dịch trong file.

Locale mặc định theo người dùng

Mỗi user có cột locale. Email thông báo tự động gửi theo ngôn ngữ người nhận nhờ contract HasLocalePreference của Laravel.

Danh sách tính năng

Quản lý tài sản

  • Asset tag tự sinh
  • Nhiều ảnh cho mỗi tài sản
  • Sinh mã QR
  • Theo dõi trạng thái & tình trạng
  • Import/export hàng loạt
  • Nhân bản tài sản

Quy trình

  • Cấp phát / Trả / Chuyển
  • Yêu cầu cần duyệt
  • Đặt chỗ Check-in / Check-out
  • Phát hiện xung đột

Bảo trì

  • Lên lịch phòng ngừa/khắc phục
  • Xem dạng lịch
  • Tự lên lịch kế tiếp
  • Theo dõi chi phí
  • Email nhắc nhở

Tài liệu

  • Đính kèm hóa đơn, sách hướng dẫn
  • Xem trước inline
  • Cảnh báo hết hạn
  • Nhiều loại tài liệu

Khấu hao

  • 3 phương pháp tính
  • Tự cập nhật giá trị
  • Biểu đồ lịch trình
  • Tổng hợp năm

Báo cáo

  • 8 loại báo cáo
  • Xuất Excel + PDF
  • Biểu đồ & dashboard
  • Lọc theo ngày

Người dùng & Vai trò

AssetHub đi kèm 5 vai trò cấu hình sẵn:

Vai tròQuyền hạn
AdminToàn quyền hệ thống — người dùng, phòng ban, cài đặt, nhật ký kiểm toán, webhook, bản dịch
IT ManagerQuản lý tài sản, danh mục, bảo trì, yêu cầu; duyệt chuyển giao; xem báo cáo & khấu hao
Kế toánQuản lý tài sản & khấu hao, chạy kiểm kê, duyệt chuyển giao, toàn quyền truy cập báo cáo (định hướng tài chính)
SupervisorDuyệt yêu cầu của phòng ban, quản lý checkout, tham gia kiểm kê, xem báo cáo
Nhân viênXem tài sản được cấp, tạo yêu cầu, quản lý checkout của mình

Quyền hạn được lưu dưới dạng vai trò Spatie — quản trị viên có thể tinh chỉnh theo từng quyền qua cơ sở dữ liệu.

Quản lý tài sản

Tạo tài sản

  1. Điều hướng tới Tài sản → Tài sản mới.
  2. Điền tên, danh mục, thương hiệu, model, số serial.
  3. Thêm ngày mua và giá (bắt buộc cho khấu hao).
  4. Upload ảnh (hỗ trợ nhiều tệp, mỗi tệp tối đa 5 MB).
  5. Lưu — asset tag và mã QR được tự sinh.

Định dạng Asset Tag

Mặc định: {PREFIX}-{YEAR}-{NNNN}, ví dụ AS-2026-0001. Cấu hình được qua Cài đặt → Chung → Tiền tố Asset Tag.

Import hàng loạt

  1. Bấm Import ở trang Tài sản.
  2. Tải template Excel.
  3. Điền dữ liệu của bạn — các cột bắt buộc: name, category_name.
  4. Upload tệp.

Mã QR

Mọi tài sản tự nhận mã QR khi tạo. Mã QR chứa URL của tài sản, nên quét xong sẽ đưa người dùng thẳng tới trang chi tiết tài sản.

In nhãn

  • Nhãn đơn: Bấm icon máy in trên bất kỳ hàng tài sản nào.
  • Định dạng PDF: A4, 2 nhãn mỗi hàng, gồm asset tag, tên, thương hiệu, serial.

Quét

Bấm Quét QR ở trang Tài sản. Cho phép quyền camera. Trình quét dùng html5-qrcode và chạy được trên mọi trình duyệt hiện đại. Lưu ý: truy cập camera yêu cầu HTTPS hoặc localhost.

Quy trình

Cấp phát tài sản

  1. Mở trang chi tiết tài sản.
  2. Bấm Cấp phát (hiển thị nếu tài sản đang sẵn).
  3. Chọn người dùng, ngày trả tùy chọn, ghi chú.
  4. Submit — giao dịch được tạo và email thông báo được gửi.

Yêu cầu tài sản

Nhân viên có thể gửi yêu cầu tài sản họ cần. Yêu cầu có 4 trạng thái: pending → approved → fulfilled, hoặc rejected. Email duyệt được gửi tự động.

Check-in / Check-out

Dành cho tài sản dùng chung (camera, máy chiếu, xe). Đặt chỗ có khoảng ngày; hệ thống chặn checkout chồng lấn. Xem dạng lịch cho phép theo dõi tất cả đặt chỗ trong nháy mắt.

Khấu hao

AssetHub tính khấu hao tài sản bằng một trong ba phương pháp:

Phương phápCông thứcTrường hợp dùng
Đường thẳng(Cost - Salvage) / Useful LifePhổ biến nhất; khấu hao đều mỗi năm
Số dư giảm dần2 / Useful Life × Book ValueNhanh hơn; cho mục đích thuế
Theo sản lượngDựa trên mức sử dụngThiết bị sản xuất

Mặc định được kế thừa từ danh mục của tài sản. Mục lịch trình được sinh hàng tháng. current_value của tài sản được cập nhật tự động vào ngày 1 mỗi tháng.

Trường tùy chỉnh

Admin → Trường tùy chỉnh cho phép bạn thêm không giới hạn thuộc tính tùy chỉnh cho tài sản:

  • Loại: văn bản, số, ngày, lựa chọn (dropdown), vùng văn bản, tệp, hộp kiểm
  • Phạm vi: áp dụng mọi danh mục hoặc danh mục cụ thể
  • Sắp xếp lại: kéo-thả tay nắm
  • Trường bắt buộc được kiểm tra khi lưu tài sản

Báo cáo

Tám báo cáo tích hợp sẵn, truy cập từ menu Báo cáo:

  1. Tổng hợp tài sản — tổng theo trạng thái, tình trạng, danh mục, phòng ban
  2. Khấu hao — mất giá theo danh mục, các tài sản khấu hao nhiều nhất
  3. Giao dịch — hoạt động cấp phát, trả, chuyển theo thời gian
  4. Chi phí bảo trì — chi tiêu theo tháng, danh mục, loại
  5. Hết hạn bảo hành — tài sản cần lưu ý trong 30/60/180 ngày
  6. Tài sản theo phòng ban — phân bổ tài sản & sử dụng ngân sách theo phòng ban
  7. Tài sản theo nguồn — phân bổ theo nguồn mua sắm, dự án, hiến tặng, chuyển giao
  8. Tổng hợp Kiểm kê — chênh lệch qua các kỳ kiểm kê định kỳ

Mọi báo cáo đều hỗ trợ xuất ExcelPDF qua các nút ở đầu trang.

Webhook

AssetHub có thể thông báo dịch vụ bên ngoài khi có sự kiện quan trọng.

Sự kiện có sẵn

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.created, checkout.returned

Định dạng Payload

{
  "event": "asset.assigned",
  "timestamp": "2026-05-05T08:00:00+00:00",
  "data": {
    "asset_id": 1,
    "asset_tag": "AS-2026-0001",
    "asset_name": "HP EliteDesk 800",
    "to_user_id": 4,
    "transaction_id": 12
  }
}

Xác thực chữ ký

Nếu đã cấu hình secret, request bao gồm header X-AssetHub-Signature chứa HMAC-SHA256 của body. Xác thực ở phía bạn:

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // hợp lệ
}

Chính sách Retry

Gửi thất bại retry 3 lần với độ trễ 200 ms. Sau 10 lần thất bại liên tiếp, webhook tự bị vô hiệu hóa.

Tác vụ theo lịch

AssetHub dùng scheduler của Laravel cho job nền. Bạn chỉ cần một entry cron — Laravel tự điều phối từng job đúng giờ.

Hostinger / Shared hosting (giao diện Cron Jobs hPanel)

Xem mục Cài đặt Hostinger → Bước 5 để có hướng dẫn dạng screenshots. Tóm tắt: Nâng cao → Cron Jobs → Custom, lệnh:

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Lịch: mỗi phút (* ở cả năm trường).

VPS / máy chủ riêng (crontab)

Chạy crontab -e với user web (thường là www-data) và thêm:

* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1

Dự phòng: URL pinger bên ngoài

Nếu host bạn không có cron, dùng URL Cron trong app (Cài đặt → tab Hệ thống) với cron-job.org (miễn phí, mỗi 15 phút).

Các job tự chạy

Thời gianLệnhMục đích
Hàng ngày 08:00send-overdue-checkout-alertsEmail nhắc checkout quá hạn
Hàng ngày 08:30send-maintenance-remindersNhắc bảo trì sắp tới
Hàng ngày 09:00send-document-expiry-alertsTài liệu hết hạn trong 30/14/7/1 ngày
Hàng ngày 09:30send-warranty-alertsCảnh báo hết hạn bảo hành + bảo hiểm
Hàng ngày 10:00assethub:send-depreciation-end-alertsCảnh báo khi tài sản đến cuối vòng đời
Hàng ngày 10:30send-inventory-audit-remindersNhắc các đợt kiểm kê đang chạy
Hàng tháng ngày 1, 02:00update-asset-valuesLàm mới current_value tài sản từ khấu hao

Khắc phục sự cố

"Permission denied" trên storage

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

Trình quét QR không mở camera

API camera của trình duyệt yêu cầu HTTPS. Cài SSL hoặc dùng localhost để test.

Email không nhận được

Kiểm tra storage/logs/laravel.log tìm lỗi. Dùng Cài đặt → Email → Gửi Test Email để xác nhận thông tin SMTP. Đảm bảo máy chủ SMTP cho phép IP gửi.

Reset cài đặt

Xóa storage/installed.lock và truy cập /install lại. Dữ liệu hiện có sẽ bị xóa nếu chạy migration lại.

Hiệu năng — danh sách tài sản chậm

Chạy php artisan optimize để cache config, route, view. Đảm bảo MySQL có index trên assets.asset_tag, assets.serial_number, assets.status (migration đã tự tạo).

Lịch sử thay đổi

v1.0.0 — Bản phát hành đầu tiên (2026-05)

  • Asset CRUD với tự sinh mã QR
  • 5 vai trò (Admin, IT Manager, Kế toán, Supervisor, Nhân viên) với phân quyền chi tiết
  • Theo dõi Nguồn tài sản (mua sắm tập trung, mua sắm phân tán, dự án đầu tư, hiến tặng, chuyển giao nội bộ)
  • Quy trình cấp phát, trả với email thông báo
  • Quy trình duyệt Chuyển giao (pending → approved/rejected) với gating quyền
  • Quy trình duyệt yêu cầu tài sản
  • Check-in/check-out có xem dạng lịch
  • Lên lịch bảo trì có tự gia hạn
  • Đính kèm tài liệu kèm cảnh báo hết hạn
  • Khấu hao với 3 phương pháp + cảnh báo cuối vòng đời
  • Module Kiểm kê — kiểm kê định kỳ, theo dõi chênh lệch
  • Trường tùy chỉnh với 7 loại input và sắp xếp kéo-thả
  • 8 báo cáo có biểu đồ, xuất Excel và PDF (gồm Tài sản theo nguồn, Tổng hợp Kiểm kê)
  • Nhật ký kiểm toán qua Spatie Activitylog với trình xem diff
  • Webhook với ký HMAC và tự retry
  • Giao diện đa ngôn ngữ: 10 ngôn ngữ (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar có RTL)
  • Giao diện Cài đặt cho công ty, email, thông báo, bản địa hóa, bản dịch
  • Trình cài đặt qua web
  • Chế độ tối với bảng màu emerald-teal

Ghi nhận

Thư viện mã nguồn mở đã dùng