Bắt đầu
Cài đặt AssetHub trên cPanel, Hostinger hoặc VPS riêng trong dưới 10 phút.
Người dùng & Vai trò
5 vai trò có sẵn với phân quyền Spatie, tinh chỉnh được theo từng người dùng.
Tính năng sản phẩm
Tài sản, theo dõi batch, quy trình, thanh lý, bảo trì, khấu hao, nhật ký kiểm toán và nhiều hơn nữa.
Tùy biến
Thêm không giới hạn trường tùy chỉnh, đổi thương hiệu, ngôn ngữ và giao diện.
Cài đặt Hostinger
Triển khai từng bước trên gói Single chia sẻ rẻ nhất.
Cài đặt cPanel
Triển khai từng bước trên hosting cPanel — không cần Terminal.
Bảo mật & QR
HTTPS, webhook ký HMAC, nhật ký kiểm toán và quét QR bằng camera.
Báo cáo & Xuất
12 báo cáo tích hợp sẵn, xuất Excel + PDF, lọc theo ngày.
Cảnh báo email
Nhắc bảo hành, bảo trì, hạn tài liệu và checkout quá hạn.
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. Với cPanel: Nâng cao → Cron Jobs. Với Hostinger: hPanel → Nâng cao → Cron Jobs. Xem Cài đặt cPanel → Bước 7 hoặc Cài đặt Hostinger → Bước 5. Nếu host không có cron, dùng URL Cron trong app với 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 hiện đại. Yêu cầu duy nhất là HTTPS. AutoSSL trên cPanel và SSL Let's Encrypt trên Hostinger đều dùng được ngay.
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ữ?
11 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, Ả Rập (RTL đầy đủ) và Hindi (हिन्दी). Admin quản lý bản dịch tại Administration → Translations (cần quyền manage translations).
Tôi có thể cài AssetHub trên hosting cPanel không?
Có — AssetHub chạy trên mọi gói cPanel shared hosting có PHP 8.2+, MySQL và Cron Jobs. Không cần Composer hay Node.js trên server — gói đã build sẵn. Nhiều cPanel không có Terminal web — không sao. Xem mục Cài đặt cPanel (kể cả cách tạo APP_KEY không cần Terminal).
Làm sao rebrand AssetHub (trang login, tiêu đề tab & màu sắc)?
AssetHub có thể rebrand hoàn toàn từ admin panel — không cần sửa code hay npm run build. Từ v3.1.0, logo login, footer và badge theo Settings → Branding → App Name. v4.0 thêm tiêu đề tab trình duyệt realtime từ cùng App Name và tab Appearance để tùy chỉnh màu toàn app cho chế độ sáng và tối.
auth.login_subtitle từng ngôn ngữ → tùy chỉnh màu trong Settings → Appearance.
Tra cứu nhanh:
| Mục | Ví dụ | Cách thay đổi |
|---|---|---|
| Logo & tên góc trên trái | VimoticFAR | Settings → Branding → App Name |
| Subtitle login | Enter your credentials to access AssetHub | Administration → Translations → auth.login_subtitle |
| Bản quyền footer | © 2026 VimoticFAR | Settings → Branding → App Name |
| Badge cột phải | VIMOTICFAR | Settings → Branding → App Name |
| Tiêu đề tab trình duyệt | YourAppName | Settings → Branding → App Name (v4.0+) |
| Màu app (nút, sidebar, badge…) | Bảng màu xanh tùy chỉnh | Settings → Appearance (v4.0+) |
1. Logo và tên:
- Đăng nhập với tài khoản quản trị.
- Vào Settings → Branding.
- Cập nhật App Name (và tùy chọn tải logo).
- Lưu.
Tên này hiển thị trên trang login (logo, footer, badge), sidebar, và — từ v4.0 — trên tiêu đề tab mọi trang.
2. Tiêu đề tab trình duyệt (v4.0):
Chữ trên tab trình duyệt theo Settings → Branding → App Name realtime. Đổi App Name, lưu và tải lại — không cần sửa .env hay rebuild. Tiêu đề cập nhật cả màn hình login và sau khi đăng nhập.
3. Subtitle login: dòng dưới tiêu đề chính dùng khóa dịch auth.login_subtitle (không phải App Name).
- Trong app (khuyến nghị): Administration → Translations → chọn ngôn ngữ → nhóm auth → khóa
login_subtitle→ thayAssetHubbằng tên app → Lưu. Lặp lại cho từng ngôn ngữ. - Trong code: sửa
lang/{locale}/auth.php— ví dụ'login_subtitle' => 'Enter your credentials to access YourAppName',
4. Footer và badge cột phải: từ v3.1.0, footer (© {year} …) và badge chữ hoa cột phải dùng cùng App Name với logo. Đổi một lần trong Settings → Branding và tải lại trang login.
5. Màu app — Appearance (v4.0):
Tab Appearance cho phép đổi bảng màu toàn ứng dụng — nút, sidebar active, badge, liên kết và chữ theo theme — riêng cho chế độ sáng và tối. Màu lưu trong cơ sở dữ liệu.
- Mở: Sidebar → Settings → Appearance (cần quyền manage settings).
- Nhóm màu: Brand & Accent (UI chính), Success / Warning / Danger / Info (badge trạng thái), Primary / Secondary / Muted / Link (chữ).
- Sáng & tối: dùng nút Editing: Light / Dark — cấu hình cả hai nếu team dùng dark mode. Preview trực tiếp bên phải.
- Lưu: nhấn Save appearance để áp dụng toàn app. Reset to defaults khôi phục bảng màu gốc AssetHub (lưu sau đó để ghi nhận).
Branding vs Appearance: Branding = tên app, logo, tiêu đề tab. Appearance = chỉ màu sắc. Rebrand trực quan đầy đủ cần cập nhật cả hai tab.
Lưu ý:
- Đổi App Name không tự cập nhật chuỗi dịch — sửa
auth.login_subtitle(và các khóaauth.*khác) từng ngôn ngữ. - Bản ghi đè dịch trong Administration → Translations lưu trong DB và giữ khi cập nhật app.
- Cột phải trang login (tiêu đề, tính năng) dùng các khóa
auth.*khác — sửa trong cùng nhóm auth nếu cần. - Nếu màu không đổi sau khi lưu Appearance, tải lại cứng (Ctrl+F5) và kiểm tra đang chỉnh bảng sáng hay tối.
- Sau khi nâng cấp từ gói cũ, tải lên đầy đủ
source/hiện tại (gồmpublic/build/build sẵn) nếu thiếu tính năng branding.
Tổng quan
AssetHub là hệ thống quản lý tài sản xây dựng bằng Laravel 11, Vue 3 và Tailwind CSS. Phiên bản 3.0 bổ sung Translation Editor đầy đủ, locale tùy chỉnh, CSV import/export và bản địa hóa múi giờ/tiền tệ thực sự có hiệu lực — trên nền v2 (batch/lot, cấp phát, thanh lý, QR bàn giao công khai).
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
12 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ị)
- Upload file dự án lên máy chủ web.
- Trỏ document root của tên miền tới
public/. - Đặt quyền:
storage/vàbootstrap/cache/phải ghi được (chmod 775). - Sao chép
.env.examplethành.envvà đặtAPP_KEY(chạyphp artisan key:generatenếu có SSH/Terminal, hoặc xem Cài đặt cPanel → Bước 5 nếu không có Terminal). - Mở
https://yourdomain.com/installtrong trình duyệt. - 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
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ường | Mặc định / Ví dụ | Ghi chú |
|---|---|---|
| Host | 127.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). |
| Port | 3306 | Cổng MySQL chuẩn. Chỉ đổi nếu provider dùng cổng khác (hiếm). |
| Tên cơ sở dữ liệu | uXXXXXX_assethub | Tê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ập | uXXXXXX_assethub | Tà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à
3306như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ỗi | Nguyên nhân và cách sửa |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Sai 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 database | Tê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 refused | Khô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: sessions | Xả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 driver | Thiếu hoặc tắt PHP pdo_mysql extension. Bật trong bảng điều khiển hosting. Trên cPanel: MultiPHP INI Editor → Extensions hoặc Select PHP Version → Extensions. Trên Hostinger: hPanel → Advanced → PHP Configuration → tab PHP Extensions. |
127.0.0.1 và 3306) — 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.
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.
- Tải và cài Laravel Herd từ herd.laravel.com.
- Đặ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. - 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).
- 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). - Sao chép
.env.examplethành.env, điền thông tin DB, rồi chạyphp artisan key:generateở gốc dự án. - Mở
http://assethub.test/installtrong 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.
- Tải XAMPP 8.2+ từ apachefriends.org và cài đặt.
- Sao chép dự án AssetHub vào
C:\xampp\htdocs\AssetHub\(Windows) hoặc/Applications/XAMPP/htdocs/AssetHub/(macOS). - Mở XAMPP Control Panel và khởi động Apache và MySQL. Nếu port bị chiếm, vào Config → service.conf để chuyển Apache sang 8080.
- Vào
http://localhost/phpmyadmin→ New → tạo database tênassethubvới collation utf8mb4. - Trong thư mục dự án: sao chép
.env.examplethành.env, đặtDB_DATABASE=assethub,DB_USERNAME=root, để trốngDB_PASSWORD(mặc định XAMPP). Chạyphp artisan key:generate. - Truy cập
http://localhost/AssetHub/public/installđể chạy wizard cài đặt.
/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.
- Tải Laragon Full từ laragon.org và cài đặt.
- Trong Laragon: Menu → PHP → Version — chuyển sang PHP 8.2 hoặc 8.3.
- Sao chép dự án AssetHub vào
C:\laragon\www\AssetHub\. - Bấm Start All. Laragon tự tạo vhost:
http://assethub.test(trỏ đến thư mụcpublic/). - Mở HeidiSQL (đi kèm) → tạo database
assethub. Thông tin mặc định: userroot, password để trống. - Sửa
.envvới thông tin DB, chạyphp artisan key:generate, rồi truy cậphttp://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://localhost và http://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í.
Bước 1 — Chuẩn bị hosting
- Đăng nhập Hostinger hPanel.
- Vào Hosting → Quản lý cho tên miền của bạn.
- Đặt phiên bản PHP thành 8.2 hoặc 8.3 qua Nâng cao → Cấu hình PHP.
- Đả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
- Trong hPanel, vào Cơ sở dữ liệu → MySQL Databases.
- Bấm Tạo cơ sở dữ liệu mới.
- Ghi lại 3 giá trị này:
Tên cơ sở dữ liệu— ví dụu123_AssetHubTên đăng nhập— ví dụu123_adminMật khẩu— được tự sinh, giữ kỹ
Bước 3 — Upload file
- Vào Tệp → File Manager trong hPanel.
- Điều hướng tới
public_html/(đây là gốc của tên miền). - Xóa mọi file
index.htmlhoặcdefault.phpmặc định trong thư mục này. - Bấm Upload Files và tải toàn bộ
source.ziptừ 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. - 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/. - Xác nhận
public_html/chứa:app/,public/,vendor/,.htaccess,index.php(trongpublic/),.env, v.v.
.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
- Mở trình duyệt và truy cập
https://yourdomain.com/install. - Bạn sẽ thấy AssetHub Installer.
- 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.
- 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)
- Host:
- Bước 3: Migrate — Bấm "Run Migrations & Seed". Mất ~10 giây. Đừng refresh.
- Bước 4: Admin — Tạo tài khoản quản trị. Dùng mật khẩu mạnh.
- 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.
- Trong hPanel, vào Nâng cao → Công việc định kỳ.
- Bấm Tạo Cron job.
- Chọn loại: Custom (không phải "PHP" — vì cần truyền tham số).
- Nhập lệnh sau (thay
uXXXXXXbằng username Hostinger của bạn):
Mẹo: mở File Manager, tìm file/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(gốc dự án), chuột phải → Thuộc tính để sao chép đường dẫn đầy đủ. - Đặt lịch Mỗi phút — cả năm trường (Minute, Hour, Day, Month, Day of week) đặt thành
*. - 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.).
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/).
- Đăng nhập admin → Cài đặt → tab Hệ thống → sao chép Cron URL.
- Đăng ký miễn phí tại cron-job.org.
- 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:
- Trong hPanel, vào Email → Tài khoản email và tạo một tài khoản (ví dụ
noreply@yourdomain.com). - Chỉnh sửa file
.envtrongpublic_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" - Lưu file.
- Đăng nhập AssetHub → Cài đặt → tab Email → Gửi Test Email. Nếu bạn nhận được là xong.
Sự cố thường gặp trên Hostinger Single
"500 Internal Server Error" sau khi upload
- Xác nhận
.htaccesstồn tại ở gốcpublic_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.logqua 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ành755đệ 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.logtì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.
Triển khai trên cPanel (Shared Hosting)
Hướng dẫn này dành cho cPanel shared hosting tiêu chuẩn (Namecheap, Bluehost, GoDaddy và hầu hết host giá rẻ). AssetHub đã có sẵn vendor/ và frontend build — không cần Composer, npm hay Terminal trên server. Nếu cPanel không có Terminal, dùng SSH Access hoặc các cách trong File Manager bên dưới.
/home/CPANELUSER/ — xem sidebar cPanel ở General Information.
Bước 1 — Đặt phiên bản PHP và extensions
- Đăng nhập cPanel.
- Mở MultiPHP Manager (hoặc Select PHP Version) và chọn PHP 8.2 hoặc 8.3 cho domain.
- Mở MultiPHP INI Editor hoặc PHP Extensions và xác nhận các extension sau đã bật:
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
- Nếu thiếu extension, bật trong danh sách hoặc liên hệ support host.
Bước 2 — Bật SSL (HTTPS)
- Vào SSL/TLS Status (hoặc Let's Encrypt SSL / AutoSSL).
- Chạy AutoSSL hoặc cài chứng chỉ miễn phí cho domain.
- HTTPS bắt buộc để trình quét QR mở camera trình duyệt.
https://yourdomain.com và kiểm tra biểu tượng ổ khóa.
Bước 3 — Tạo database và user MySQL
- Mở Manage My Databases (trong mục Databases).
- Ở Create New Database, nhập tên (vd.
assethub) và Create. cPanel tự thêm prefix — tên đầy đủ dạngcpaneluser_assethub. - Ở MySQL Users, tạo user với mật khẩu mạnh. Copy username có prefix.
- Ở Add User To Database, chọn user và database, Add, rồi cấp ALL PRIVILEGES. Bước này dễ bỏ sót — thiếu sẽ lỗi
Access denied (1045). - Ghi chính xác 3 giá trị hiển thị trong cPanel:
Tên cơ sở dữ liệu— ví dụu123_AssetHubTên đăng nhập— ví dụu123_adminMật khẩu— được tự sinh, giữ kỹ
Bước 4 — Upload file
- Mở File Manager, vào
public_html/(document root). - Bật Settings → Show Hidden Files để thấy
.htaccessvà.env. - Xóa
index.htmlmặc định trongpublic_html/nếu có. - Upload
source.zipvà Extract, hoặc upload nội dung thư mục/source/qua FTP. - Sau giải nén,
public_html/phải cóapp/,public/,vendor/,.htaccessgốc vàartisancùng cấp.
.htaccess gốc chuyển mọi request sang public/ — thường không cần đổi document root thủ công.
Bước 5 — Chuẩn bị .env trước khi chạy installer
Hoàn thành bước này trước khi mở /install. Laravel cần APP_KEY hợp lệ và cấu hình DB đúng trong .env.
- Trong File Manager, copy
.env.examplethành.env(cùng thư mục vớiartisan). - Sửa
.envvà đặt tối thiểu:APP_NAME=AssetHub APP_ENV=production APP_DEBUG=false APP_URL=https://yourdomain.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=cpaneluser_assethub DB_USERNAME=cpaneluser_admin DB_PASSWORD="your_password" SESSION_DRIVER=file CACHE_STORE=file - Đặt
DB_CONNECTION=mysql—.env.examplemặc định dùng SQLite; shared hosting cần MySQL. - Đặt
SESSION_DRIVER=filevàCACHE_STORE=filetrước migration đầu (tránh lỗi bảng sessions). - Bọc
DB_PASSWORDtrong dấu ngoặc kép nếu mật khẩu có ký tự đặc biệt (#,$,!, v.v.).
Tạo APP_KEY (không cần Terminal)
Nhiều gói cPanel không có Terminal web. Dùng một trong các cách:
- SSH Access (cPanel → Security → SSH Access): kết nối PuTTY/PowerShell, chạy
cd ~/public_html && php artisan key:generate. - File Manager — tạo tạm
public/genkey.php, mở trình duyệt, copy kết quả vàoAPP_KEY=, rồi xóa file ngay.<?php echo 'base64:' . base64_encode(random_bytes(32)); - Trên máy PC — nếu có PHP local:
php -r "echo 'base64:'.base64_encode(random_bytes(32));"rồi dán vào.env.
genkey.php ngay sau khi copy key. Không để script helper trên production.
- Đặt quyền
storage/vàbootstrap/cache/là 755 (recursive) nếu installer báo lỗi ghi.
Bước 6 — Chạy web installer
- Mở
https://yourdomain.com/installtrong trình duyệt. - Bước 1: Requirements — tất cả phải ĐẠT (xanh). Sửa extension PHP ở Bước 1 nếu thiếu.
- Bước 2: Database — nhập tên có prefix từ Bước 3:
- Host:
127.0.0.1orlocalhost - Port:
3306 - Database:
cpaneluser_assethub - Username:
cpaneluser_admin - Password: (your MySQL password)
- Host:
- Bước 3: Migrate — bấm "Run Migrations & Seed". ~10 giây. Không refresh trang.
- Bỏ tick Include demo data nếu cài production sạch.
- Bước 4: Admin — tạo tài khoản quản trị.
- Xong! — lưu Cron URL ở màn hình cuối.
Bước 7 — Cấu hình Cron Jobs cho email cảnh báo
AssetHub cần một cron job chạy mỗi phút để Laravel gửi cảnh báo bảo hành, bảo trì và email theo lịch.
- Trong cPanel, vào Advanced → Cron Jobs.
- Ở Add New Cron Job, đặt lịch Every minute (
* * * * *). - Nhập lệnh (thay
CPANELUSERbằng username cPanel trong General Information):
Mẹo: đường dẫn PHP có thể là/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run/usr/local/bin/phphoặc/usr/bin/php. Đường dẫn artisan thường là/home/CPANELUSER/public_html/artisan. - Bấm Add New Cron Job để lưu.
public_html/public/? Cron vẫn trỏ /home/CPANELUSER/public_html/artisan — không thêm /public/.
- Đăng nhập admin → Settings → System → copy Cron URL.
- Đăng ký miễn phí tại cron-job.org.
- Tạo job gọi URL đó mỗi 15 phút.
Bước 8 — Cấu hình email (SMTP)
Tạo tài khoản email cPanel cho thông báo gửi đi:
- Vào Email Accounts → tạo vd.
noreply@yourdomain.com. - Sửa
.envtrong File Manager:MAIL_MAILER=smtp MAIL_HOST=mail.yourdomain.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" - Lưu, rồi trong AssetHub: Settings → Email → Send Test Email.
Sự cố thường gặp trên cPanel
"Access denied for user" (SQLSTATE 1045)
- Copy tên database và username chính xác từ cPanel — kể cả prefix.
- Xác nhận đã Add User To Database với ALL PRIVILEGES.
- Reset mật khẩu MySQL trong cPanel và cập nhật
.env— dùng dấu ngoặc quanhDB_PASSWORDnếu có ký tự đặc biệt.
Migration fail sau khi bước Database đã pass
- Wizard test từ form, nhưng Migrate đọc
.env. Đảm bảo khớp nhau. - Xóa
bootstrap/cache/config.phpnếu có, rồi thử lại. - Đảm bảo
DB_CONNECTION=mysqltrong.env(không phải sqlite).
"Invalid default value" khi migration (1067)
Đã sửa trong AssetHub v2.1.0+ (bảng checkouts dùng dateTime). Nếu dùng bản cũ, cập nhật file migration hoặc tải gói mới từ CodeCanyon.
"500 Internal Server Error" sau upload
- Kiểm tra
.htaccessgốc và PHP 8.2+. - Xem
storage/logs/laravel.logđể biết lỗi thực. - Xác nhận
APP_KEYđã set trong.env— key trống gây lỗi 500.
Không có Terminal trong cPanel
Bình thường trên nhiều gói shared. Dùng SSH Access (nếu bật), genkey.php tạm ở Bước 5, hoặc tạo key trên PC local.
Trình quét QR không mở camera
Bật SSL qua SSL/TLS Status → AutoSSL và truy cập bằng https://.
Cấu hình
Tệp .env
| Khóa | Mô tả | Ví dụ |
|---|---|---|
APP_NAME | Tên ứng dụng hiển thị trên thanh tiêu đề | AssetHub |
APP_URL | URL công khai của bản cài đặt | https://assets.example.com |
APP_DEBUG | Đặt false trên production | false |
DB_* | Thông tin kết nối cơ sở dữ liệu | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Mail driver | smtp, log, mailgun |
MAIL_HOST | Hostname máy chủ SMTP | smtp.gmail.com |
MAIL_PORT | Port SMTP | 587 |
MAIL_USERNAME | Username SMTP | your@email.com |
MAIL_PASSWORD | Mật khẩu SMTP hoặc app token | ********** |
MAIL_FROM_ADDRESS | Địa chỉ From mặc định | noreply@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ờ (danh sách tìm kiếm, gồm
Europe/Skopje), định dạng ngày, mã tiền tệ (gồmMKD— Denar Macedonia), ký hiệu và vị trí ký hiệu — áp dụng toàn app sau khi lưu - Chung → Trang tài sản công khai: hiển thị QR (public / đăng nhập / tắt) và tạo lại QR sau khi đổi URL
- Tab Bản địa hóa có link tới Administration → Translations (Translation Editor, chỉ admin)
- Branding: tên app và logo — cập nhật logo login, footer, badge và tiêu đề tab trình duyệt (v4.0+). Subtitle login: sửa
auth.login_subtitletrong Administration → Translations - Appearance (v4.0+): tùy chỉnh màu thương hiệu, trạng thái và chữ cho chế độ sáng/tối — xem hướng dẫn rebrand trong FAQ
Hỗ trợ đa ngôn ngữ
AssetHub đi kèm sẵn 11 ngôn ngữ, bao gồm Ả Rập (RTL) và Hindi. 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
| Mã | Ngôn ngữ | Hướng |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
hi | हिन्दी | LTR |
Cách chuyển ngôn ngữ
- Click vào icon cờ ở góc trên bên phải để mở dropdown.
- Chọn ngôn ngữ từ danh sách.
- Trang sẽ reload; toàn bộ nhãn UI, ngày tháng và định dạng tiền tệ chuyển theo.
- Lựa chọn được lưu cả vào tài khoản người dùng và cookie (1 năm).
/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)
Vào Administration → Translations (admin có quyền manage translations):
- Click "Add Locale" — nhập mã (vd
mkcho tiếng Macedonia), tên hiển thị, tên bản ngữ, tên file cờ SVG, hướng (LTR/RTL), và locale gốc để copy bản dịch. - Locale mới xuất hiện trong language switcher và danh sách ngôn ngữ mặc định ở Settings → Localization.
- Bản dịch DB tự động override file trong
lang/{code}/.
Translation Editor
Editor liệt kê mọi key bản dịch theo file (assets, nav, settings…). Mỗi key hiển thị baseline file và override DB (nếu có).
- Lọc theo locale, nhóm bản dịch, hoặc tìm kiếm text.
- Click giá trị để sửa inline; lưu vào DB ngay.
- Reset key để quay về baseline file.
- Locale built-in (en, vi, es…) có thể sửa; locale tùy chỉnh hoàn toàn từ DB.
- Chỉ user có quyền manage translations mới truy cập được trang này.
CSV import / export
- Export — tải mọi key của một locale dạng CSV (
group,key,value). - Import — upload CSV cùng cột; override DB được cập nhật, key mới được thêm.
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.
Ngôn ngữ mặc định site đặt tại Settings → Localization → Default Language. User cá nhân override qua language switcher trên header.
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
- Theo dõi lô/batch theo số lượng (v2)
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
- 12 loại báo cáo
- Xuất Excel + PDF
- Biểu đồ & dashboard
- Lọc theo ngày
Vận hành (v2)
- Tài sản lô/batch với đối soát trực tiếp
- Cấp phát cho nhân viên, phòng ban, kho
- Thanh lý với duyệt phân quyền
- Trang QR bàn giao công khai tại /a/{tag}
Bản địa hóa & Bản dịch (v3)
- 11 ngôn ngữ UI + locale tùy chỉnh
- Translation Editor: tìm kiếm, lọc nhóm, sửa trực tiếp
- CSV import/export cập nhật hàng loạt
- Múi giờ & tiền tệ áp dụng toàn app
Thương hiệu & Giao diện (v4)
- Tiêu đề tab trình duyệt cập nhật từ Cài đặt → Thương hiệu → Tên ứng dụng
- Tùy chỉnh màu ứng dụng trong Cài đặt → Giao diện (chế độ sáng & tối)
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 |
|---|---|
| Admin | Toà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 Manager | Quản lý tài sản (đơn chiếc + lô/batch), 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án | Quản lý tài sản & khấu hao, chạy kiểm kê, duyệt chuyển giao và thanh lý, toàn quyền truy cập báo cáo (định hướng tài chính) |
| Supervisor | Duyệ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ên | Xem 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
- Điều hướng tới Tài sản → Tài sản mới.
- Điền tên, danh mục, thương hiệu, model, số serial.
- Thêm ngày mua và giá (bắt buộc cho khấu hao).
- Upload ảnh (hỗ trợ nhiều tệp, mỗi tệp tối đa 5 MB).
- 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
- Bấm Import ở trang Tài sản.
- Tải template Excel.
- Điền dữ liệu của bạn — các cột bắt buộc:
name,category_name. - Upload tệp.
Tài sản lô / Batch (v2)
Với hàng giống nhau theo số lượng (ghế, bàn phím, đồng phục), chọn Loại theo dõi → Batch / Lot trên form Tạo tài sản thay vì tạo nhiều bản ghi trùng.
- Nhập số lượng và đơn vị (cái, bộ, thùng). Khi lưu, toàn bộ được đưa vào kho.
- Mở tài sản → tab Phân bổ → Cấp phát cho nhân viên hoặc phòng ban.
- Dùng Thu hồi, Điều chỉnh (hư/mất/sửa) — bảng tổng hợp phải cân bằng với tổng số lượng.
- Batch hỗ trợ chỉ đơn giá; khấu hao tùy chọn và mặc định tắt để cài nhanh.
php artisan migrate — không mất dữ liệu.Mã QR
Mọi tài sản tự nhận mã QR khi tạo. Quét mở trang công khai hoặc chi tiết trong app (xem bên dưới). Quét trong app nhảy thẳng tới màn hình chi tiết.
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.
Trang QR bàn giao công khai (v2)
Mỗi tài sản có URL công khai tại /a/{asset_tag} — in làm phiếu bàn giao mà không cần đăng nhập.
- Cấu hình tại Cài đặt → Chung → Public Asset Page: Công khai, Cần đăng nhập, hoặc Tắt.
- Trang hiển thị ảnh, trường chính và (với batch) chi tiết số lượng. Có thể in làm biên bản bàn giao.
- Sau khi đổi
APP_URL, bấm Regenerate all QR codes trong cùng mục cài đặt.
Quy trình
Cấp phát tài sản
- Mở trang chi tiết tài sản.
- Bấm Cấp phát (hiển thị nếu tài sản đang sẵn).
- Chọn người dùng, ngày trả tùy chọn, ghi chú.
- 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.
Thanh lý — Write-off chính thức (v2)
Hàng hư/mòn được thanh lý theo đợt có tài liệu, phân quyền duyệt (người đề xuất ≠ người duyệt). Cần quyền manage disposals và approve disposals.
- Sidebar → Disposals → New Disposal. Đặt tiêu đề và kỳ (Q1–Q4, hàng năm, ad-hoc).
- Mở bản nháp → Add items — đơn vị batch hư hoặc tài sản đơn ở tình trạng Poor.
- Bấm Submit for approval — đợt bị khóa.
- Người duyệt khác bấm Approve & execute — tài sản/đơn vị chuyển sang disposed.
- In disposal minutes (PDF) để lưu hồ sơ tuân thủ.
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áp | Công thức | Trường hợp dùng |
|---|---|---|
| Đường thẳng | (Cost - Salvage) / Useful Life | Phổ biến nhất; khấu hao đều mỗi năm |
| Số dư giảm dần | 2 / Useful Life × Book Value | Nhanh hơn; cho mục đích thuế |
| Theo sản lượng | Dựa trên mức sử dụng | Thiế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
Mười hai báo cáo tích hợp sẵn, truy cập từ menu Báo cáo:
- 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
- Khấu hao — mất giá theo danh mục, các tài sản khấu hao nhiều nhất
- Giao dịch — hoạt động cấp phát, trả, chuyển theo thời gian
- Chi phí bảo trì — chi tiêu theo tháng, danh mục, loại
- Hết hạn bảo hành — tài sản cần lưu ý trong 30/60/180 ngày
- 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
- 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
- Tổng hợp Kiểm kê — chênh lệch qua các kỳ kiểm kê định kỳ
- Cấp phát nhân viên (v2) — ai đang giữ gì, gồm phân bổ batch
- Phòng ban / Vị trí (v2) — tài sản và số lượng theo phòng ban hoặc vị trí
- Đối soát tồn kho (v2) — tồn kho vs đã cấp vs hư/mất/thanh lý
- Tài sản hư hỏng (v2) — hàng cần sửa hoặc thanh lý
Mọi báo cáo đều hỗ trợ xuất Excel và PDF qua các nút ở đầu trang. Báo cáo v2 theo số lượng (số bản ghi + tổng đơn vị).
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.deletedasset.assigned,asset.returned,asset.transferredrequest.created,request.approved,request.rejected,request.fulfilledmaintenance.scheduled,maintenance.started,maintenance.completedcheckout.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ờ.
Shared hosting (Cron Jobs trên cPanel / Hostinger)
Xem Cài đặt cPanel → Bước 7 hoặc Cài đặt Hostinger → Bước 5. Tóm tắt: Nâng cao → Cron Jobs, lệnh:
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
Lịch: mỗi phút (* ở cả năm trường).
Lệnh cron cPanel
Thay CPANELUSER bằng username cPanel của bạn:
/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
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 gian | Lệnh | Mục đích |
|---|---|---|
| Hàng ngày 08:00 | send-overdue-checkout-alerts | Email nhắc checkout quá hạn |
| Hàng ngày 08:30 | send-maintenance-reminders | Nhắc bảo trì sắp tới |
| Hàng ngày 09:00 | send-document-expiry-alerts | Tài liệu hết hạn trong 30/14/7/1 ngày |
| Hàng ngày 09:30 | send-warranty-alerts | Cảnh báo hết hạn bảo hành + bảo hiểm |
| Hàng ngày 10:00 | assethub:send-depreciation-end-alerts | Cảnh báo khi tài sản đến cuối vòng đời |
| Hàng ngày 10:30 | send-inventory-audit-reminders | Nhắc các đợt kiểm kê đang chạy |
| Hàng tháng ngày 1, 02:00 | update-asset-values | Làm mới current_value tài sản từ khấu hao |
Hướng dẫn nâng cấp
Hướng dẫn từng bước để cập nhật bản cài đặt hiện có. Mở hướng dẫn phù hợp với phiên bản bạn đang dùng.
- v3.1 → v4.0 — Hướng dẫn nâng cấp đầy đủ — Cài đặt Giao diện, tiêu đề tab trình duyệt từ Thương hiệu. Không cần migration.
- v3.0 → v3.1 — Hướng dẫn nâng cấp đầy đủ — Checklist ngôn ngữ hiển thị trên bộ chọn navbar. Không cần migration.
- v2.x → v3.0 — Hướng dẫn nâng cấp đầy đủ — Translation Editor, locale tùy chỉnh, cài đặt bản địa hóa.
- v1.x → v2.0 — Hướng dẫn nâng cấp đầy đủ — Tài sản lô, thanh lý, trang QR công khai, báo cáo vận hành.
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.
Database "Access denied" (1045) trên cPanel
Sai user/mật khẩu, chưa gán user vào database, hoặc ký tự đặc biệt trong mật khẩu làm hỏng .env. Xem Cài đặt cPanel → Sự cố thường gặp.
Lỗi migration 1067 (Invalid default value)
MySQL strict mode trên shared hosting từ chối nhiều cột timestamp NOT NULL. Đã sửa từ v2.1.0+. Cập nhật gói hoặc đổi checkout_date / expected_return_date sang dateTime trong migration checkouts.
Thiếu APP_KEY / lỗi 500 trước khi cài
Laravel cần APP_KEY trong .env trước khi app chạy. Nếu cPanel không có Terminal, xem Cài đặt cPanel → Bước 5 (SSH, genkey.php hoặc tạo trên PC).
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).
Nâng cấp từ v3.0.x lên v3.1
Tải gói v3.1 từ CodeCanyon, thay file ứng dụng (giữ .env và upload trong storage/). Không cần migration mới. Cài đặt visible_locales là tùy chọn — nếu chưa cấu hình, tất cả ngôn ngữ vẫn hiển thị trên bộ chọn navbar.
v3.0 → v3.1 — Hướng dẫn nâng cấp đầy đủ
Nâng cấp từ v2.x lên v3.0
Tải ZIP v3 từ CodeCanyon, thay file ứng dụng (giữ .env và upload trong storage/), rồi chạy php artisan migrate. Bảng locale tùy chỉnh và override bản dịch được thêm tự động. Cài đặt và tài sản hiện có được giữ nguyên.
v2.x → v3.0 — Hướng dẫn nâng cấp đầy đủ
Nâng cấp từ v1.x lên v2.0
Tải ZIP v2 từ CodeCanyon, thay file ứng dụng (giữ .env và upload trong storage/), rồi chạy php artisan migrate. Nâng cấp không phá vỡ — tài sản đơn chiếc v1 vẫn hoạt động; bảng batch/thanh lý được thêm tự động.
Lịch sử thay đổi
v3.1.0 — Bộ chọn ngôn ngữ hiển thị (2026-06)
- Settings → Localization: checklist chọn ngôn ngữ hiển thị trên menu ngôn ngữ navbar (built-in + custom)
- Ngôn ngữ mặc định luôn hiển thị; bộ chọn tự ẩn khi chỉ còn một ngôn ngữ
- Backend kiểm tra chuyển locale; người dùng đang dùng ngôn ngữ bị ẩn sẽ về ngôn ngữ mặc định
- Không cần migration — nâng cấp chỉ thay file
- Branding trang login: footer copyright và badge cột phải theo Settings → Branding → App Name (không cần sửa code)
v3.0.0 — Bản địa hóa & Translation Editor (2026-06)
- Translation Editor tại Administration → Translations (Thêm Locale, sửa inline, tìm/lọc theo nhóm)
- Locale tùy chỉnh lưu DB — mã, tên hiển thị, tên bản ngữ, cờ SVG, hướng, locale gốc
- CSV import/export cập nhật bản dịch hàng loạt
- Múi giờ và tiền tệ áp dụng toàn app (config/localization.php gồm Europe/Skopje, MKD)
- Settings → Localization: dropdown múi giờ/tiền tệ có tìm kiếm, hỗ trợ giá trị tùy chỉnh
- Thêm Hindi (hi) làm locale thứ 11; date_format được dùng trên các trang Vue
- Quyền manage translations; override DB merge với baseline file lang/
v2.0.0 — Bản vận hành (2026-06)
- Tài sản lô/batch — theo dõi số lượng, cấp phát, thu hồi, đối soát trực tiếp
- 4 báo cáo vận hành: Cấp phát nhân viên, Phòng ban/Vị trí, Đối soát tồn kho, Tài sản hư hỏng
- Module thanh lý — đợt write-off, duyệt phân quyền, biên bản PDF in được
- Trang QR công khai tại
/a/{tag}với tùy chọn hiển thị - Báo cáo cũ cập nhật hiển thị số bản ghi + tổng đơn vị
- Mã QR trỏ trang bàn giao công khai; log giao dịch ghi số lượng khi di chuyển batch
- Cập nhật demo data, user guide (giao riêng trong
documentation/) và chuỗi i18n
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
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT