快速上手
在 10 分钟内将 AssetHub 安装到 cPanel、Hostinger 或您自己的 VPS 上。
用户与角色
5 个预配置角色,采用 Spatie 权限系统,可按用户精细调整。
产品功能
资产、工作流、维护、折旧、审计日志等。
自定义
无限自定义字段,可更改品牌、语言和主题。
Hostinger 配置
在最便宜的 Single 共享主机套餐上分步部署。
cPanel 配置
在标准 cPanel 共享主机上逐步部署 — 无需终端。
安全与二维码
HTTPS、HMAC 签名 Webhook、审计日志和摄像头二维码扫描。
报表与导出
8 个内置报表,支持 Excel + PDF 导出和日期筛选。
邮件提醒
保修、维护、文档过期和逾期 checkout 提醒。
常见问题
我可以在最便宜的 Hostinger Single 套餐上运行 AssetHub 吗?
可以 — AssetHub 与 Hostinger Single (~$2.99/月) 完全兼容。Single 包含 PHP 8.3、MySQL、原生 Cron Jobs 和免费 SSL — AssetHub 所需的一切。无需 SSH、Composer 或命令行。请参阅 Hostinger 配置 一节获取分步指南。
我需要技术能力才能安装吗?
不需要。基于 Web 的安装器处理一切:需求检查、数据库设置、迁移和管理员账户创建。只需上传文件,在浏览器访问 /install,按向导操作即可。
定时邮件(保修/维护提醒)如何工作?
AssetHub 使用 Laravel 的调度器。您只需配置一个每分钟运行的 cron job,Laravel 会在内部按正确时间调度每个任务(每日 08:00、每月等)。对于 cPanel,请在 Advanced → Cron Jobs 中进行配置。对于 Hostinger,使用 hPanel → Advanced → Cron Jobs。请参阅 cPanel 配置 → 步骤 7 或 Hostinger 配置 → 步骤 5。如果您的主机没有 cron,请使用应用内的 Cron URL 配合免费的 cron-job.org 服务。
支持哪些折旧方法?
三种方法:直线法(年度均等折旧)、双倍余额递减法(加速折旧,常用于税务)和工作量法(基于使用,适用于制造设备)。资产价值在每月 1 日自动刷新。
二维码扫描器能在手机上工作吗?
是的 — 它通过 html5-qrcode 使用浏览器摄像头,可在任何现代手机/平板/桌面浏览器上运行。唯一的要求是 HTTPS。cPanel AutoSSL 和 Hostinger Let's Encrypt SSL 均可开箱即用。
我可以不写代码添加自己的字段吗?
可以。管理员 → 自定义字段允许你添加无限属性(文本、数字、日期、下拉、文本域、文件、复选框),将它们限定到特定类别,标记为必填,并通过拖拽重新排序 — 全部在 UI 中完成。
AssetHub 支持多少种语言?
开箱即用 11 种语言:英语、越南语、西班牙语、法语、德语、中文、日语、葡萄牙语(巴西)、俄语、阿拉伯语(完整 RTL 支持)和印地语(हिन्दी)。管理员在 Administration → Translations 管理翻译(需要 manage translations 权限)。
我可以将 AssetHub 安装在 cPanel 共享主机上吗?
可以 — AssetHub 可在任何标准 cPanel 共享主机方案上运行,需要 PHP 8.2+、MySQL 和 Cron Jobs。服务器上不需要 Composer 或 Node.js — 软件包已预先构建。许多 cPanel 主机不包含 Web 终端;这没问题。请参阅 cPanel 配置部分获取完整的分步指南(包括如何在不使用终端的情况下生成 APP_KEY)。
如何重塑 AssetHub 品牌(登录页、页面标题与颜色)?
AssetHub 可在管理面板中完全重塑品牌 — 无需修改代码或 npm run build。自 v3.1.0 起,登录 Logo、页脚和徽章跟随 Settings → Branding → App Name。v4.0 新增实时浏览器页面标题和 Appearance 标签页,可自定义浅色/深色全局颜色。
auth.login_subtitle → 在 Settings → Appearance 中自定义颜色。
快速参考:
| 项目 | 示例 | 修改方式 |
|---|---|---|
| Top-left logo & wordmark | VimoticFAR | Settings → Branding → App Name |
| Login subtitle | Enter your credentials to access AssetHub | Administration → Translations → auth.login_subtitle |
| Footer copyright | © 2026 VimoticFAR | Settings → Branding → App Name |
| Right panel badge | VIMOTICFAR | Settings → Branding → App Name |
| Browser page title (tab) | YourAppName | Settings → Branding → App Name (v4.0+) |
| App colors (buttons, sidebar, badges…) | Custom green / blue palette | Settings → Appearance (v4.0+) |
1. Logo and wordmark:
- Sign in as an administrator.
- Go to Settings → Branding.
- Update App Name (and optionally upload a logo).
- Save.
This name appears on the login page (logo, footer, badge), in the sidebar, and — since v4.0 — in the browser tab title on every page.
2. Browser page title (v4.0):
The text shown in the browser tab follows Settings → Branding → App Name at runtime. Change App Name, save, and refresh — no .env edit or rebuild needed. The title updates on the login screen and after sign-in.
3. Login subtitle: the line below the main heading uses the translation key auth.login_subtitle (not App Name).
- In the app (recommended): Administration → Translations → select language → group auth → key
login_subtitle→ replaceAssetHubwith your app name → Save. Repeat for each language. - In code: edit
lang/{locale}/auth.php— e.g.'login_subtitle' => 'Enter your credentials to access YourAppName',
4. Footer and right-panel badge: since v3.1.0, the footer (© {year} …) and the uppercase badge on the right column use the same App Name as the logo. Change it once under Settings → Branding and refresh the login page.
5. App colors — Appearance (v4.0):
The Appearance tab lets you change the color scheme for the entire application — buttons, sidebar highlights, badges, links, and themed text — separately for light and dark mode. Colors are saved to the database.
- Open: Sidebar → Settings → Appearance (requires manage settings permission).
- Color groups: Brand & Accent (primary UI), Success / Warning / Danger / Info (status badges), Primary / Secondary / Muted / Link (text).
- Light & dark: use the Editing: Light / Dark toggle — configure both if your team uses dark mode. Live Preview on the right.
- Save: click Save appearance to apply app-wide. Reset to defaults restores AssetHub's built-in palette (save afterward to persist).
Branding vs Appearance: Branding = app name, logo, page title. Appearance = colors only. For a complete visual rebrand, update both tabs.
Notes:
- Changing App Name does not update translation strings — edit
auth.login_subtitle(and otherauth.*keys) per language. - Translation overrides in Administration → Translations are stored in the database and survive app updates.
- The login page right column (headline, features) uses other
auth.*keys — edit them under the same auth group if needed. - If colors do not update after saving Appearance, hard-refresh (Ctrl+F5) and confirm you are editing the correct light/dark palette.
- After upgrading from an older package, upload the full current
source/files (including pre-builtpublic/build/) if branding features are missing.
概述
AssetHub 是基于 Laravel 11、Vue 3 和 Tailwind CSS 构建的完整资产管理系统。版本 3.0 在 v2 批次/批量跟踪、分配、报废和公共 QR 交接页面的基础上,新增完整的 Translation Editor、自定义 locale、CSV 导入/导出,以及有效的时区/货币本地化。
二维码跟踪
为每项资产自动生成二维码。使用任何浏览器摄像头扫描。
折旧
3 种方法:直线法、余额递减法、工作量法。
自定义字段
无限自定义属性 — 文本、日期、下拉、文件、复选框。
Webhook
15 种事件类型,支持 HMAC 签名和自动重试。
审计日志
每项变更都被记录,提供完整 diff 查看器。
报表
12 种报表,含图表、Excel 和 PDF 导出。
服务器要求
- PHP 8.2 或更高
- MySQL 5.7+ 或 MariaDB 10.3+
- Composer 2.x
- Node.js 18+ 和 npm 9+
- Web 服务器:Apache 或 Nginx
必需的 PHP 扩展
- OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo
磁盘空间
最低约 200 MB。请为资产照片和文档附件预留额外空间。
安装
方式 A — Web 安装器(推荐)
- 将项目文件上传到 Web 服务器。
- 将域名 document root 指向
public/。 - 设置权限:
storage/和bootstrap/cache/必须可写(chmod 775)。 - 将
.env.example复制为.env并设置APP_KEY(如果有 SSH/终端,请运行php artisan key:generate,或参阅 cPanel 配置 → 步骤 5 了解文件管理器的替代方案)。 - 在浏览器打开
https://yourdomain.com/install。 - 按向导操作 — Requirements → Database → Migrate → Admin Account → Done。
方式 B — CLI 安装
# 1. 安装依赖
composer install --no-dev --optimize-autoloader
npm install
npm run build
# 2. 配置环境
cp .env.example .env
php artisan key:generate
# 3. 编辑 .env 设置数据库凭据
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 4. 创建数据库表并播种初始数据
php artisan migrate --seed
# 5. 为上传创建 storage 符号链接
php artisan storage:link
# 6. 为生产缓存配置
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 7. 标记为已安装
echo "Installed" > storage/installed.lock
向导步骤 2 — 数据库配置
当向导进入步骤 2 时,您必须输入在主机面板中创建的数据库的 MySQL 连接信息。数据库必须已存在(可以为空 — 下一步向导将创建表)。
| 字段 | 默认值 / 示例 | 说明 |
|---|---|---|
| Host | 127.0.0.1 | 适用于 99% 的共享主机(Hostinger、cPanel、Plesk)。除非主机商提供自定义 MySQL 主机名(如 AWS RDS、DigitalOcean Managed Database 等托管数据库服务),否则请保持默认。 |
| Port | 3306 | 标准 MySQL 端口。仅当服务商使用非标准端口时才需更改(少见)。 |
| 数据库名称 | uXXXXXX_assethub | 主机面板中显示的完整名称。大多数共享主机会以用户 ID 为前缀(例如 Hostinger:u287094729_assethub)。 |
| 用户名 | uXXXXXX_assethub | 对上述数据库有权限的 MySQL 用户。请勿使用 root — 共享主机不允许。 |
| 密码 | (您的数据库密码) | 创建 MySQL 用户时设置或复制的密码。大多数主机仅在创建时显示一次 — 如未保存,请使用 "View / Reset"。 |
各主机面板中查找凭据的位置
- Hostinger: hPanel → Databases → Management → 点击您的数据库。页面显示名称、用户名及 "Show password" 按钮。
- cPanel: cPanel → MySQL Databases。数据库列表显示名称;用户列在下方。如需重置密码,请使用 "Change Password"。
- Plesk: Plesk → Databases → 点击数据库名称。详情页显示凭据并提供密码重置。
- DirectAdmin: DirectAdmin → MySQL Management → 点击数据库。凭据和密码重置在数据库详情页。
- 外部 / 托管数据库: AWS RDS、DigitalOcean Managed Database 等。使用云控制台中的自定义主机名、端口(通常为
3306,请核实)、数据库名、用户和密码。请确保服务器 IP 已在数据库防火墙白名单中。
常见错误及解决方法
| 错误信息 | 原因与解决方法 |
|---|---|
SQLSTATE[HY000] [1045] Access denied | 用户名或密码错误,或该用户无权访问此数据库。请仔细核对拼写(包括共享主机上的用户前缀)。如不确定,请在主机面板中重置密码。 |
SQLSTATE[HY000] [1049] Unknown database | 数据库名称错误,或您尚未在主机面板中创建数据库。请先创建,然后重新输入准确名称(包括任何前缀)。 |
SQLSTATE[HY000] [2002] Connection refused | 无法连接到 MySQL 服务器。请检查主机和端口。在共享主机上可尝试将 localhost 与 127.0.0.1 互换。对于托管数据库,请确保服务器 IP 已加入白名单。 |
SQLSTATE[42S02] Base table not found: sessions | 当 .env 中在表创建之前设置了 SESSION_DRIVER=database 或 CACHE_STORE=database 时会出现此问题。编辑 .env 将两者改为 file,保存后重新加载向导。安装完成后可按需改回 database。 |
could not find driver | 缺少或已禁用 PHP pdo_mysql 扩展。请在您的主机控制面板中启用(PHP 配置 → 扩展)。在 cPanel 中:MultiPHP INI Editor → 扩展或 Select PHP Version → 扩展。在 Hostinger 上:hPanel → 高级 → PHP 配置 → PHP 扩展选项卡。 |
127.0.0.1 和 3306)— 在共享主机上请保持默认。您只需填写数据库名称、用户名和密码。点击 Test & Save → 验证连接并进入步骤 3。
本地环境(本地开发)
快速指南:在部署到生产环境之前,在你的电脑上运行 AssetHub 进行测试或开发。选择与你的操作系统匹配的环境。
选项 1 — Laravel Herd(推荐,macOS 与 Windows)
Laravel Herd 是 Laravel 团队的官方本地环境 — 免费、原生、无 Docker。捆绑 PHP 8.2/8.3/8.4、Nginx,以及(Herd Pro 中)MySQL/Redis。
- 从 herd.laravel.com 下载并安装 Laravel Herd。
- 将 AssetHub 项目文件夹放入
~/Herd/(macOS)或%USERPROFILE%\Herd\(Windows)。Herd 自动创建.test域名 — 例如http://assethub.test。 - 打开 Herd → Sites 并确认 PHP 版本为 8.2 或 8.3。右键站点 → Secure 启用 HTTPS(QR 扫描器需要)。
- 创建一个 MySQL 数据库。在 Herd Pro 中使用 Services → MySQL → Open in TablePlus。否则安装 MySQL Community 或使用 SQLite(
DB_CONNECTION=sqlite、touch database/database.sqlite)。 - 将
.env.example复制为.env,填入 DB 凭据,然后在项目根目录运行php artisan key:generate。 - 在浏览器中打开
http://assethub.test/install并按照安装向导操作。
选项 2 — XAMPP(Windows、macOS、Linux)
XAMPP 捆绑 Apache、MySQL/MariaDB 和 PHP。免费且跨平台。务必选择 PHP 8.2 或更高的版本。
- 从 apachefriends.org 下载 XAMPP 8.2+ 并安装。
- 将 AssetHub 项目复制到
C:\xampp\htdocs\AssetHub\(Windows)或/Applications/XAMPP/htdocs/AssetHub/(macOS)。 - 打开 XAMPP Control Panel 并启动 Apache 和 MySQL。如果端口被占用,使用 Config → service.conf 将 Apache 切换到 8080。
- 前往
http://localhost/phpmyadmin→ 新建 → 创建名为assethub的数据库,采用 utf8mb4 排序规则。 - 在项目文件夹中:将
.env.example复制为.env,设置DB_DATABASE=assethub、DB_USERNAME=root、DB_PASSWORD留空(XAMPP 默认)。运行php artisan key:generate。 - 访问
http://localhost/AssetHub/public/install运行安装向导。
/public/ 的简洁 URL:在 C:\xampp\apache\conf\extra\httpd-vhosts.conf 中创建虚拟主机,让 DocumentRoot 指向项目的 public/ 文件夹,然后将 127.0.0.1 assethub.local 添加到 hosts 文件。
选项 3 — Laragon(Windows)
Laragon 是为 Laravel 设计的便携式 Windows 栈 — 自动 vhost、简洁 URL、MySQL/MariaDB 和内置 HeidiSQL。
- 从 laragon.org 下载 Laragon Full 并安装。
- 在 Laragon:菜单 → PHP → Version — 切换到 PHP 8.2 或 8.3。
- 将 AssetHub 项目复制到
C:\laragon\www\AssetHub\。 - 点击 Start All。Laragon 自动创建 vhost:
http://assethub.test(指向public/文件夹)。 - 打开 HeidiSQL(内置)→ 创建数据库
assethub。默认凭据:用户root,密码为空。 - 用 DB 凭据编辑
.env,运行php artisan key:generate,然后访问http://assethub.test/install。
选项 4 — 内置 PHP 服务器(无需 Web 服务器)
最简单的选项:Laravel 自带 artisan serve,可启动开发用 PHP 服务器。不需要 Apache 或 Nginx。最适合快速测试。
# 安装依赖并配置
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate
# 运行 migration 并播种初始数据
php artisan migrate --seed
# 启动开发服务器
php artisan serve
# 然后访问: http://127.0.0.1:8000/install
本地环境常见陷阱
QR 扫描器无法在 http:// 上打开摄像头
浏览器摄像头 API 需要 HTTPS,但有一个例外:http://localhost 和 http://127.0.0.1 被视为安全上下文。如果你通过 LAN IP 访问 AssetHub(例如 http://192.168.1.10),摄像头会被拒绝。开发时使用 localhost,或通过 Herd / mkcert 启用 HTTPS。
storage 上的 Permission denied(macOS / Linux)
如果应用尝试写日志或缓存时出现写入错误,修复权限:chmod -R 775 storage bootstrap/cache。Windows 上通常不需要。
端口已被占用
如果端口 8000 被其他应用占用,使用不同端口:
php artisan serve --port=8001
本地测试邮件
在大多数 localhost 设置中,真实 SMTP 不可用。两个安全选项:(1) 在 .env 中设置 MAIL_MAILER=log — 邮件被转储到 storage/logs/laravel.log 而不是发送;或 (2) 使用 Mailtrap / MailHog 将外发邮件捕获到假收件箱。
MAIL_MAILER=log
# 所有邮件都写入 storage/logs/laravel.log
前端资源(Vite / Tailwind)
AssetHub 的 Vue/Tailwind 前端在包中已预构建。如果你编辑 Vue 组件或 Tailwind 配置,需要 Node.js 18+:
npm install
npm run dev # 开发期间的热重载
npm run build # 生产构建(部署前运行)
部署到 Hostinger Single(共享主机)
对于没有 VPS 或技术经验的用户,这是推荐路径。AssetHub 与最便宜的 Hostinger Single Web Hosting 套餐(~$2.99/月)完全兼容。无需 SSH、Composer 或命令行 — Single 自带原生 cron jobs、PHP 8.3 和免费 SSL。
步骤 1 — 准备主机
- 登录 Hostinger hPanel。
- 前往你的域名的 Hosting → 管理。
- 通过 高级 → PHP 配置 将 PHP 版本设置为 8.2 或 8.3。
- 确保启用以下 PHP 扩展(通常默认已启用):
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
步骤 2 — 创建 MySQL 数据库
- 在 hPanel,前往 数据库 → MySQL Databases。
- 点击 创建新数据库。
- 记下这 3 个值:
数据库名— 例如u123_AssetHub用户名— 例如u123_admin密码— 自动生成,请妥善保管
步骤 3 — 上传文件
- 在 hPanel 前往 文件 → File Manager。
- 导航到
public_html/(这是你域名的根目录)。 - 删除该文件夹中任何默认的
index.html或default.php。 - 点击 上传文件,上传整个包中的
source.zip。
或者你也可以通过 FTP 直接上传/source/文件夹内容。 - 如果上传的是 ZIP,右键 → 解压。解压后,所有文件应位于
public_html/的根目录。 - 确认
public_html/包含:app/、public/、vendor/、.htaccess、index.php(在public/中)、.env等。
.htaccess 存在于 public_html/ 根目录,其中包含 URL 重写规则。如果 File Manager 隐藏了隐藏文件,请点击 设置 → 显示隐藏文件。
步骤 4 — 运行安装器
- 打开浏览器访问
https://yourdomain.com/install。 - 你会看到 AssetHub Installer。
- 步骤 1:Requirements — 所有检查应通过(绿色)。若有失败,请联系 Hostinger 支持以启用缺失的 PHP 扩展。
- 步骤 2:Database — 输入上面步骤 2 中的凭据:
- 主机:
localhost - 端口:
3306 - 数据库:
u123_AssetHub - 用户名:
u123_admin - 密码:(Hostinger 生成的那个)
- 主机:
- 步骤 3:Migrate — 点击 "Run Migrations & Seed"。约 10 秒。不要刷新。
- 步骤 4:Admin — 创建管理员账户。使用强密码。
- 完成! — 你会看到 Cron URL(请保存!)和登录按钮。
步骤 5 — 通过 Hostinger Cron 配置自动邮件提醒
AssetHub 使用 Laravel 的调度器处理后台任务:保修提醒、维护提醒、文档过期、折旧刷新和逾期 checkout。在 hPanel 设置一个 cron job,Laravel 会决定何时运行哪项任务。
- 在 hPanel 前往 高级 → Cron Jobs。
- 点击 创建 Cron job。
- 选择类型:Custom(不是 "PHP" — 我们需要传参数)。
- 命令栏输入(将
uXXXXXX替换为你的 Hostinger 账号用户名):
提示:打开 File Manager,定位/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan文件(项目根目录),右键 → 属性以复制完整路径。 - 将计划设为 每分钟 — 全部五个字段(分、时、日、月、周几)设为
*。 - 点击 保存。
就这样 — AssetHub 现在会自动发送逾期 checkout 提醒、维护提醒、文档过期提醒、保修提醒,并自动刷新资产折旧值。Laravel 会内部按正确频率(每日 08:00、每月等)调度每项任务。
public_html/public/?没问题 — 你的 Laravel 代码仍然在 public_html/ 根目录,所以 cron 路径保持 /home/uXXXX/public_html/artisan(不要加 /public/)。
- 以 admin 身份登录 → 设置 → 系统选项卡 → 复制 Cron URL。
- 在 cron-job.org 免费注册。
- 创建一个 cronjob,粘贴 URL,设置为 每 15 分钟,保存。
步骤 6 — 配置邮件(SMTP)
Hostinger 在每个套餐中提供邮箱账户。要用于 AssetHub 通知:
- 在 hPanel 前往 邮件 → 邮箱账户 并创建一个(例如
noreply@yourdomain.com)。 - 通过 File Manager 编辑
public_html/中的.env文件: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" - 保存文件。
- 登录 AssetHub → 设置 → 邮件选项卡 → 发送测试邮件。如果收到,即完成。
Hostinger Single 常见问题
上传后 "500 Internal Server Error"
- 确认
.htaccess存在于public_html/根目录,并包含重写规则。 - 确认 hPanel 中的 PHP 版本为 8.2 或 8.3。
- 通过 File Manager 检查
storage/logs/laravel.log查看真正的错误。
上传时 "Permission denied"
Hostinger 通常会设置正确权限,如果没有:
- 在 File Manager 右键
storage/→ 权限 → 递归设为755。 - 对
bootstrap/cache/做同样操作。
二维码扫描器无法打开摄像头
浏览器摄像头 API 需要 HTTPS。Hostinger 通过 Let's Encrypt 提供免费 SSL — 在 hPanel SSL → 管理 中启用。
定时邮件未发送
- 在 hPanel → Cron Jobs → 查看 cron 条目的 Last run 列。如果为空,cron 没在执行 — 检查 artisan 路径是否正确。
- 手动测试命令:在 hPanel 中打开 Terminal(若可用)并运行 cron 命令。如果报错,错误信息会指出问题(PHP 版本错误、路径错误等)。
- 确认 SMTP 配置正确(设置 → 邮件 → 发送测试)。
- 检查
storage/logs/laravel.log中是否有调度器错误。
性能慢
Hostinger Single 是共享 CPU/RAM。如果团队超过 20 人,考虑:
- 升级到 Premium(~$3.99/月)— 更快的服务器、更多资源、多个数据库。
- 或 Business(~$5.99/月)— 专用资源、每日备份、staging 环境。
部署到 cPanel(共享主机)
本指南涵盖标准 cPanel 共享主机(Namecheap、Bluehost、GoDaddy 及大多数经济型主机)。AssetHub 附带预构建的 vendor/ 和前端资源 — 不需要 Composer、npm 或 Web 终端。如果您的 cPanel 缺少终端,请使用 SSH Access 或以下文件管理器解决方案。
/home/CPANELUSER/ — 在 cPanel 侧栏的 General Information 下查看。
步骤 1 — 设置 PHP 版本和扩展
- 登录 cPanel。
- 打开 MultiPHP Manager(或 Select PHP Version)并将您的域名设置为 PHP 8.2 或 8.3。
- 打开 MultiPHP INI Editor 或 PHP Extensions,确认以下扩展已启用:
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
- 如果缺少扩展,请在扩展列表中启用或联系主机支持。
步骤 2 — 启用 SSL(HTTPS)
- 前往 SSL/TLS Status(或 Let's Encrypt SSL / AutoSSL)。
- 运行 AutoSSL 或为您的域名安装免费证书。
- HTTPS 是浏览器内置 QR 扫描器访问摄像头的必要条件。
https://yourdomain.com 确认锁定图标出现。
步骤 3 — 创建 MySQL 数据库和用户
- 打开 Manage My Databases(在数据库下)。
- 在 Create New Database 下,输入名称(例如
assethub)并点击创建。cPanel 会自动添加账户前缀 — 完整名称形如cpaneluser_assethub。 - 在 MySQL Users 下,创建一个强密码的用户。复制带前缀的完整用户名。
- 在 Add User To Database 下,选择用户和数据库,点击添加,然后授予 ALL PRIVILEGES。此步骤容易遗漏 — 如果没有它,您将收到
Access denied (1045)错误。 - 将以下三个值准确记录(与 cPanel 中显示的完全一致):
数据库名— 例如u123_AssetHub用户名— 例如u123_admin密码— 自动生成,请妥善保管
步骤 4 — 上传文件
- 打开 File Manager 并进入
public_html/(您域名的文档根目录)。 - 启用 Settings → Show Hidden Files 以查看
.htaccess和.env。 - 如有,删除
public_html/中任何默认的index.html。 - 上传
source.zip软件包并解压,或通过 FTP 上传/source/文件夹的内容。 - 解压后,
public_html/应包含app/、public/、vendor/、根目录.htaccess和同级的artisan。
.htaccess 会将所有请求重定向到 public/ 文件夹 — 在大多数主机上,您不需要手动更改文档根目录。
步骤 5 — 运行安装程序前准备 .env
在访问 /install 之前完成此步骤。Laravel 要求 .env 中有有效的 APP_KEY 和正确的数据库设置。
- 在文件管理器中,将
.env.example复制为.env(与artisan同一文件夹)。 - 编辑
.env并至少设置: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 - 设置
DB_CONNECTION=mysql— 默认.env.example使用 SQLite;共享主机需要 MySQL。 - 在首次迁移前设置
SESSION_DRIVER=file和CACHE_STORE=file(避免"找不到 sessions 表"错误)。 - 如果
DB_PASSWORD包含特殊字符(#、$、!等),请用双引号包裹。
生成 APP_KEY(无需终端)
许多 cPanel 方案不包含 Web 终端。请使用以下方法之一:
- SSH Access(cPanel → 安全 → SSH Access):使用 PuTTY 或 PowerShell 连接,然后运行
cd ~/public_html && php artisan key:generate。 - 文件管理器辅助工具 — 临时创建
public/genkey.php,在浏览器中访问,将输出复制到APP_KEY=,然后立即删除文件。<?php echo 'base64:' . base64_encode(random_bytes(32)); - 在您的电脑上 — 如果本地安装了 PHP,运行
php -r "echo 'base64:'.base64_encode(random_bytes(32));"并将结果粘贴到.env中。
genkey.php。切勿在生产服务器上留下辅助脚本。
- 如果安装程序报告写入错误,请将
storage/和bootstrap/cache/权限设置为 755(递归)。
步骤 6 — 运行 Web 安装程序
- 在浏览器中打开
https://yourdomain.com/install。 - 步骤 1:Requirements — 所有检查必须通过(绿色)。修复上述步骤 1 中缺少的 PHP 扩展。
- 步骤 2:Database — 输入步骤 3 中的确切带前缀名称:
- 主机:
127.0.0.1orlocalhost - 端口:
3306 - 数据库:
cpaneluser_assethub - 用户名:
cpaneluser_admin - 密码: (your MySQL password)
- 主机:
- 步骤 3:Migrate — 点击"Run Migrations & Seed"。约需 10 秒。请勿刷新页面。
- 取消勾选 Include demo data 以进行干净的生产安装。
- 步骤 4:Admin — 创建您的管理员账户。
- 完成! — 保存最终界面显示的 Cron URL。
步骤 7 — 设置 Cron Jobs 以发送邮件提醒
AssetHub 需要每分钟运行一个 cron job,以便 Laravel 可以发送保修提醒、维护提醒和其他定时邮件。
- 在 cPanel 中,前往 Advanced → Cron Jobs。
- 在 Add New Cron Job 下,将计划设置为每分钟(
* * * * *)。 - 输入命令(将
CPANELUSER替换为 General Information 中的 cPanel 用户名):
提示:PHP 路径可能是/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run/usr/local/bin/php或/usr/bin/php— 如不确定请询问主机。artisan 路径是您上传项目的位置(通常是/home/CPANELUSER/public_html/artisan)。 - 点击 Add New Cron Job 保存。
public_html/public/?Cron 仍然指向 /home/CPANELUSER/public_html/artisan — 不要添加 /public/。
- 以管理员身份登录 → 设置 → 系统 → 复制 Cron URL。
- 在 cron-job.org 免费注册。
- 创建一个每 15 分钟访问该 URL 的任务。
步骤 8 — 配置邮件(SMTP)
创建一个 cPanel 邮件账户用于发送外发通知:
- 前往 Email Accounts → 创建例如
noreply@yourdomain.com。 - 在文件管理器中编辑
.env: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" - 保存,然后在 AssetHub 中:设置 → 邮件 → 发送测试邮件。
cPanel 常见问题
"Access denied for user"(SQLSTATE 1045)
- 准确从 cPanel 复制数据库名称和用户名 — 包括账户前缀。
- 确认您已完成 Add User To Database 并授予 ALL PRIVILEGES。
- 在 cPanel 中重置 MySQL 密码并更新
.env— 如果DB_PASSWORD包含特殊字符,请用引号包裹。
数据库步骤通过后迁移失败
- 安装向导测试表单中的凭据,但 Migrate 从
.env读取。请确保两者一致。 - 如果存在
bootstrap/cache/config.php,请删除后重试。 - 确保
.env中设置了DB_CONNECTION=mysql(而非 sqlite)。
迁移期间出现"Invalid default value"(1067)
已在 AssetHub v2.1.0+ 中修复(checkouts 表使用 dateTime 列)。如果您使用旧版本,请更新迁移文件或从 CodeCanyon 下载最新软件包。
上传后出现"500 Internal Server Error"
- 确认根目录
.htaccess存在且 PHP 为 8.2+。 - 检查
storage/logs/laravel.log了解真实错误。 - 确认
.env中已设置APP_KEY— 空密钥会导致 500 错误。
cPanel 中没有终端
这在许多共享方案上是正常的。请使用 SSH Access(如果已启用)、步骤 5 中的临时 genkey.php 方法,或在本地电脑上生成密钥。
QR 扫描器摄像头无法打开
通过 SSL/TLS Status → AutoSSL 启用 SSL,并通过 https:// 访问网站。
配置
.env 文件
| 键 | 描述 | 示例 |
|---|---|---|
APP_NAME | 在标题栏显示的应用名称 | AssetHub |
APP_URL | 你安装的公共 URL | https://assets.example.com |
APP_DEBUG | 生产环境设为 false | false |
DB_* | 数据库连接详情 | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | 邮件驱动 | smtp, log, mailgun |
MAIL_HOST | SMTP 服务器主机名 | smtp.gmail.com |
MAIL_PORT | SMTP 端口 | 587 |
MAIL_USERNAME | SMTP 用户名 | your@email.com |
MAIL_PASSWORD | SMTP 密码或 app token | ********** |
MAIL_FROM_ADDRESS | 默认 From 地址 | noreply@example.com |
应用内设置
大部分非敏感选项可从 管理员 → 设置 配置:
- 常规:公司名/邮箱/电话,asset tag 前缀
- 邮件:发送测试邮件以验证 SMTP
- 通知:保修提醒阈值,维护提醒窗口
- 本地化:时区(可搜索列表,含
Europe/Skopje)、日期格式、货币代码(含MKD— 马其顿代纳尔)、符号及符号位置 — 保存后全应用生效 - 常规 → 公共资产页面:QR 可见性(公开 / 登录 / 禁用),以及 URL 变更后重新生成所有 QR 码
- 本地化 选项卡链接到 Administration → Translations,可打开完整的 Translation Editor(仅管理员)
- Branding:应用名称和 Logo — 更新登录 Logo、页脚、徽章和浏览器页面标题(v4.0+)。登录副标题:在 Administration → Translations 中编辑
auth.login_subtitle - Appearance(v4.0+):自定义浅色/深色模式的品牌、状态和文字颜色 — 见 FAQ 中的品牌重塑指南
多语言支持
AssetHub 开箱即用提供 11 种语言,包括 RTL 阿拉伯语和印地语。用户可通过右上角旗帜下拉菜单切换语言。
内置语言
| 代码 | 语言 | 方向 |
|---|---|---|
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 |
如何切换语言
- 点击右上角的国旗图标打开下拉菜单。
- 从列表中选择您的语言。
- 页面重新加载;所有 UI 标签、日期和货币格式都会切换。
- 您的选择同时保存在用户账户和 Cookie(1 年有效期)中。
/locale/{code},仅在 PHP 服务器运行时有效。请始终通过您的真实域名(生产环境)或 http://localhost:8000(开发环境配合 php artisan serve)访问。而像本文档这样的文档文件是完全独立的,可以直接打开。
添加自定义语言(管理员)
前往 Administration → Translations(具有 manage translations 权限的管理员):
- 点击 "Add Locale" — 提供代码(例如马其顿语
mk)、显示名称、本地名称、旗帜 SVG 文件名、方向(LTR/RTL)以及用于复制翻译的基础 locale。 - 新 locale 将出现在语言切换器和 设置 → 本地化 的默认语言列表中。
- 数据库存储的翻译会自动覆盖
lang/{code}/中的文件翻译。
Translation Editor
编辑器按文件(如 assets、nav、settings)分组列出每个翻译键。键显示文件基线和任何数据库覆盖。
- 按 locale、翻译组或搜索文本筛选。
- 点击值进行内联编辑;更改立即保存到数据库。
- 重置键以恢复为文件基线。
- 内置 locale(en、vi、es 等)可编辑;自定义 locale 完全由数据库驱动。
- 仅具有 manage translations 权限的用户可访问此页面。
CSV import / export
- 导出 — 将某 locale 的所有键下载为 CSV(
group,key,value)。 - 导入 — 上传相同列的 CSV;现有数据库覆盖将被更新,新键将被插入。
每个用户的默认语言
每个用户都有 locale 列。得益于 Laravel 的 HasLocalePreference 契约,邮件通知会自动以收件人偏好语言发送。
站点默认语言在 设置 → 本地化 → 默认语言 中设置。个人用户可通过页眉语言切换器覆盖此设置。
功能列表
资产管理
- 自动生成 asset tag
- 每项资产多张图片
- 二维码生成
- 状态与状况跟踪
- 批量导入/导出
- 克隆资产
- 批次 / 批量数量跟踪 (v2)
工作流
- 分配/归还/转移
- 基于审批的请求
- Check-in / Check-out 预约
- 冲突检测
维护
- 计划预防性/纠正性维护
- 日历视图
- 自动计划下一次
- 成本跟踪
- 邮件提醒
文档
- 附加发票、手册
- 内嵌预览
- 过期提醒
- 多种文档类型
折旧
- 3 种计算方法
- 自动更新价值
- 进度图表
- 年度汇总
报表
- 12 种报表类型
- Excel + PDF 导出
- 图表与仪表盘
- 日期筛选
运营功能 (v2)
- 批次 / 批量资产,支持实时对账
- 分配给员工、部门、仓库
- 报废审批,职责分离
- 公共 QR 交接页面 /a/{tag}
本地化与翻译 (v3)
- 11 种内置 UI 语言 + 自定义 locale
- Translation Editor:搜索、分组筛选、内联编辑
- CSV 导入/导出,用于批量更新翻译
- 时区与货币设置全应用生效
品牌与外观 (v4)
- 浏览器标签页标题可通过 设置 → 品牌 → 应用名称 更新
- 在 设置 → 外观 中自定义应用颜色(浅色和深色模式)
用户与角色
AssetHub 自带 5 个预配置角色:
| 角色 | 能力 |
|---|---|
| Admin | 完整系统访问 — 用户、部门、设置、审计日志、Webhook、翻译 |
| IT 经理 | 管理资产(单项 + 批次/批量)、类别、维护、请求;审批转移;查看报表与折旧 |
| 会计 | 管理资产与折旧,执行库存盘点,审批转移和报废,完整报表访问权限(侧重财务) |
| 主管 | 批准部门请求、管理 checkout、参与库存盘点、查看报表 |
| 员工 | 查看已分配资产、创建请求、管理自己的 checkout |
权限以 Spatie 角色形式存储 — 管理员可通过数据库按权限精细调整。
资产管理
创建资产
- 导航到 资产 → 新资产。
- 填写名称、类别、品牌、型号、序列号。
- 添加购买日期和价格(折旧必填)。
- 上传图片(支持多文件,每文件最大 5 MB)。
- 保存 — asset tag 和二维码会自动生成。
Asset Tag 格式
默认:{PREFIX}-{YEAR}-{NNNN},例如 AS-2026-0001。可通过 设置 → 常规 → Asset Tag 前缀 配置。
批量导入
- 在资产页面点击 导入。
- 下载 Excel 模板。
- 填入你的数据 — 必填列:
name、category_name。 - 上传文件。
批次 / 批量资产 (v2)
对于数量相同的同类物品(椅子、键盘、制服),请在新资产表单中选择 跟踪类型 → Batch / Lot,而不是创建重复记录。
- 输入 数量 和单位(件、套、箱)。保存后,库存归入仓库池。
- 打开资产 → 分配 选项卡 → 分配 给员工或部门。
- 使用 归还、调整(损坏/丢失/维修)或处置操作 — 实时汇总必须与总数量对账。
- 批量资产仅支持 单价;折旧为可选项,默认关闭以加快设置。
php artisan migrate — 不会丢失数据。二维码
每项资产在创建时自动获得 QR 码。扫描可打开资产的公开或认证页面(见下文)。应用内扫描直接跳转到资产详情页。
打印标签
- 单个标签:点击任意资产行的打印机图标。
- PDF 格式:A4,每行 2 个标签,包含 asset tag、名称、品牌、序列号。
扫描
在资产页面点击 扫描二维码。允许摄像头权限。扫描器使用 html5-qrcode,在任何现代浏览器上工作。注意:摄像头访问需要 HTTPS 或 localhost。
公共 QR 交接页面 (v2)
每项资产还有一个可打印的公共 URL:/a/{asset_tag} — 无需登录即可用于实物交接。
- 在 设置 → 常规 → Public Asset Page 中配置:公开、需要登录或禁用。
- 页面显示照片、关键字段及(对于批次)数量明细。用户可打印为交接单。
- 更改
APP_URL后,在同一设置面板中点击 Regenerate all QR codes。
工作流
资产分配
- 打开资产详情页。
- 点击 分配(资产可用时显示)。
- 选择用户、可选归还日期、备注。
- 提交 — 交易创建,邮件通知发送。
资产请求
员工可以提交他们需要的资产请求。请求有 4 种状态:pending → approved → fulfilled,或 rejected。审批邮件自动发送。
Check-in / Check-out
针对共享资产(相机、投影仪、车辆)。预约有日期范围;系统阻止 checkout 重叠。日历视图一目了然显示所有预约。
报废 — 正式核销 (v2)
磨损或损坏的物品按有文档记录的批次核销,实行职责分离(提议人 ≠ 审批人)。需要 manage disposals 和 approve disposals 权限。
- 侧边栏 → Disposals → New Disposal。设置标题和期间(Q1–Q4、年度或临时)。
- 打开草稿 → Add items — 符合条件的损坏批量单位或状况为 Poor 的单项资产。
- 点击 Submit for approval — 批次锁定。
- 另一位审批人点击 Approve & execute — 资产/单位标记为已报废。
- 打印 disposal minutes (PDF) 作为合规记录。
折旧
AssetHub 使用以下三种方法之一计算资产折旧:
| 方法 | 公式 | 适用场景 |
|---|---|---|
| 直线法 | (Cost - Salvage) / Useful Life | 最常用;年度均等折旧 |
| 余额递减法 | 2 / Useful Life × Book Value | 加速;税务用途 |
| 工作量法 | 基于使用 | 制造设备 |
默认值继承自资产的类别。进度条目按月生成。资产的 current_value 在每月 1 日自动更新。
自定义字段
管理员 → 自定义字段让你为资产添加无限自定义属性:
- 类型:文本、数字、日期、选择(下拉)、文本域、文件、复选框
- 范围:适用于所有类别或指定类别
- 重新排序:拖动把手
- 必填字段在保存资产时验证
报表
十二种内置报表,可从报表菜单访问:
- 资产汇总 — 按状态、状况、类别、部门统计
- 折旧 — 各类别价值损失,折旧最多的资产
- 交易 — 一段时间内的分配、归还、转移活动
- 维护成本 — 按月、类别、类型的支出
- 保修过期 — 30/60/180 天内需关注的资产
- 部门资产 — 各部门的资产分布与预算利用率
- 资产来源 — 在采购、项目、捐赠、转移等来源的分布
- 库存盘点汇总 — 周期性盘点中的差异
- 员工分配 (v2) — 谁持有哪些资产,包括批量分配
- 部门 / 位置 (v2) — 按部门或位置统计资产和数量
- 库存对账 (v2) — 库存 vs 已分配 vs 损坏/丢失/报废
- 损坏资产 (v2) — 标记为维修或核销的项目
所有报表均支持通过页眉按钮导出 Excel 和 PDF。v2 报表支持数量感知(资产数量 + 总单位数)。
Webhook
AssetHub 可在关键事件发生时通知外部服务。
可用事件
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
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
}
}
签名验证
如配置了 secret,请求会包含头部 X-AssetHub-Signature,内容为 payload body 的 HMAC-SHA256。在你侧验证:
$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
// 有效
}
重试策略
失败投递会以 200 ms 延迟重试 3 次。连续失败 10 次后,webhook 会被自动禁用。
计划任务
AssetHub 使用 Laravel 调度器执行后台 job。你只需一条 cron 条目 — Laravel 会内部在正确时间调度每个 job。
共享主机(cPanel / Hostinger Cron Jobs 界面)
请参阅 cPanel 配置 → 步骤 7 或 Hostinger 配置 → 步骤 5 获取截图说明。简而言之:Advanced → Cron Jobs,命令:
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
计划:每分钟(五个字段都用 *)。
cPanel Cron 命令
将 CPANELUSER 替换为您的 cPanel 用户名:
/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
VPS / 专用服务器(crontab)
以 Web 用户(通常是 www-data)运行 crontab -e,加入:
* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1
备选:外部 URL pinger
如果你的主机完全没有 cron,使用应用内的 Cron URL(设置 → 系统选项卡)配合 cron-job.org(免费,每 15 分钟)。
自动运行的 job
| 时间 | 命令 | 用途 |
|---|---|---|
| 每日 08:00 | send-overdue-checkout-alerts | 逾期 checkout 的邮件提醒 |
| 每日 08:30 | send-maintenance-reminders | 即将到来的维护提醒 |
| 每日 09:00 | send-document-expiry-alerts | 30/14/7/1 天内到期的文档 |
| 每日 09:30 | send-warranty-alerts | 保修 + 保险到期提醒 |
| 每日 10:00 | assethub:send-depreciation-end-alerts | 资产达到使用寿命终点时的提醒 |
| 每日 10:30 | send-inventory-audit-reminders | 活跃库存盘点的提醒 |
| 每月 1 日 02:00 | update-asset-values | 从折旧刷新资产 current_value |
Upgrade Guides
Step-by-step guides for updating an existing installation. Open the guide that matches your current version.
- v3.1 → v4.0 — Full upgrade guide — Appearance settings, browser tab title from Branding. No migration required.
- v3.0 → v3.1 — Full upgrade guide — Visible languages checklist in navbar picker. No migration required.
- v2.x → v3.0 — Full upgrade guide — Translation Editor, custom locales, localization settings.
- v1.x → v2.0 — Full upgrade guide — Batch assets, disposals, public QR page, operational reports.
故障排查
storage 上 "Permission denied"
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
二维码扫描器无法打开摄像头
浏览器摄像头 API 需要 HTTPS。安装 SSL 证书,或使用 localhost 测试。
邮件未到达
查看 storage/logs/laravel.log 中的错误。使用 设置 → 邮件 → 发送测试邮件 验证 SMTP 凭据。确保你的 SMTP 服务器允许发送 IP。
cPanel 数据库 "Access denied"(1045)
用户名/密码错误、缺少用户到数据库的授权,或密码中的特殊字符导致 .env 解析错误。请参阅 cPanel 配置 → 常见问题。
迁移错误 1067(Invalid default value)
共享主机上的 MySQL 严格模式拒绝多个 NOT NULL timestamp 列。已在 v2.1.0+ 中修复。请更新您的软件包或在 checkouts 迁移中将 checkout_date / expected_return_date 改为 dateTime。
缺少 APP_KEY / 安装前 500 错误
Laravel 要求在应用加载之前 .env 中存在 APP_KEY。如果 cPanel 没有终端,请参阅 cPanel 配置 → 步骤 5 了解 SSH、genkey.php 或本地生成方法。
重置安装
删除 storage/installed.lock 并再次访问 /install。如果重新运行 migration,现有数据将被擦除。
性能 — 资产列表慢
运行 php artisan optimize 缓存 config、route、view。确保 MySQL 在 assets.asset_tag、assets.serial_number、assets.status 上有索引(migration 已自动创建)。
Upgrading from v3.0.x to v3.1
Download the v3.1 package from CodeCanyon, replace application files (keep your .env and storage/ uploads). No new migrations are required. The new visible_locales setting is optional — if unset, all languages remain visible in the navbar picker.
v3.0 → v3.1 — Full upgrade guide
从 v2.x 升级到 v3.0
从 CodeCanyon 下载 v3 ZIP,替换应用文件(保留 .env 和 storage/ 上传内容),然后运行 php artisan migrate。自定义 locale 和翻译覆盖的新表将自动添加。现有设置和资产将保留。
v2.x → v3.0 — Full upgrade guide
从 v1.x 升级到 v2.0
从 CodeCanyon 下载 v2 ZIP,替换应用文件(保留 .env 和 storage/ 上传内容),然后运行 php artisan migrate。升级不会破坏现有数据 — 现有单项资产继续可用;新的批次/报废表将自动添加。
更新日志
v3.1.0 — Visible Language Picker (2026-06)
- Settings → Localization: checklist to choose which languages appear in the navbar language dropdown (built-in + custom locales)
- Default language is always visible; picker auto-hides when only one language is selected
- Backend validates locale switches; users on a hidden locale fall back to the default language
- No database migration required — upgrade is file-replace only
- 登录页品牌:页脚版权和右侧面板徽章跟随 Settings → Branding → App Name(无需改代码)
v3.0.0 — 本地化与 Translation Editor (2026-06)
- Translation Editor 界面位于 Administration → Translations(添加 Locale、内联编辑、按组搜索/筛选)
- 自定义 locale 存储在数据库 — 代码、显示名称、本地名称、旗帜 SVG、方向、基础 locale
- CSV 导入/导出,用于批量更新翻译
- 时区和货币设置现已全应用生效(config/localization.php 含 Europe/Skopje、MKD)
- 设置 → 本地化:可搜索的时区/货币下拉框,支持自定义值
- 新增 Hindi (hi) 为第 11 个内置 locale;Vue 页面遵循 date_format
- 权限控制的 manage translations;数据库覆盖与 lang/ 文件基线合并
v2.0.0 — 运营版本 (2026-06)
- 批次 / 批量资产 — 数量跟踪、分配、归还、实时对账
- 4 个运营报表:员工分配、部门/位置、库存对账、损坏资产
- 报废模块 — 核销批次、职责分离审批、可打印会议纪要 PDF
- 公共 QR 资产页面
/a/{tag},可见性可配置 - 旧版报表更新为显示资产数量 + 总单位数
- QR 码链接到公共交接页面;交易日志记录批量移动的数量
- 更新演示数据、用户指南(单独包含在
documentation/中)及 i18n 字符串
v1.0.0 — 初始发布(2026-05)
- 资产 CRUD,二维码自动生成
- 5 个用户角色(Admin、IT 经理、会计、主管、员工),细粒度权限
- 资产来源跟踪(集中采购、分散采购、投资项目、捐赠、内部转移)
- 分配、归还工作流,邮件通知
- 转移审批工作流(pending → approved/rejected),含权限门控
- 资产请求审批流
- Check-in/check-out 带日历视图
- 维护计划带自动续期
- 文档附件带过期提醒
- 3 种计算方法的折旧 + 寿命终点提醒
- 库存盘点模块 — 周期性盘点带差异跟踪
- 自定义字段,7 种输入类型,拖拽排序
- 8 种报表带图表,Excel 和 PDF 导出(含资产来源、库存盘点汇总)
- 通过 Spatie Activitylog 实现审计日志,带 diff 查看器
- Webhook,HMAC 签名,自动重试
- 多语言 UI:10 种语言(en、vi、es、fr、de、zh、ja、pt-BR、ru、ar 含 RTL)
- 设置 UI:公司、邮件、通知、本地化、翻译
- Web 安装向导
- Emerald-Teal 品牌色板的深色模式
致谢
使用的开源库
- 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