2026-07-16 21:16:47 +08:00
2026-03-10 16:19:47 +08:00

固定资产管理系统

这是一个前后端分离的固定资产管理系统,覆盖资产台账、借用归还、扫码出入库、挂载关系、维修、报废、统计分析和系统设置等功能。

技术栈

  • 前端:Vue 3、Vite、TypeScript、Pinia、Vue Router、Tailwind CSS
  • 后端:Express、TypeScript、Prisma、MySQL
  • 部署:Docker Compose

目录结构

  • frontend/:前端页面、组件、状态管理、接口封装
  • backend/:后端路由、控制器、中间件、工具函数
  • backend/prisma/schema.prisma:数据库模型
  • deploy.sh:固定资产系统安全部署脚本
  • scripts/backup-equipment.sh:固定资产系统备份脚本
  • AGENTS.md:仓库协作与多代理分工说明
  • BACKUP.md:备份与回滚说明

本地开发

先复制环境变量模板:

cp .env.example .env

分别安装依赖:

cd frontend && npm install
cd backend && npm install

常用命令:

cd frontend && npm run dev
cd frontend && npm run build
cd backend && npm run dev
cd backend && npm run build
cd backend && npm run prisma:generate
cd backend && npm run prisma:migrate

服务器部署

生产服务器上同时运行两套同类系统:

  • 固定资产系统:/opt/equipment-management
  • 摄影设备借还系统:/opt/shebeiguanli

两套系统使用不同的容器、端口、网络和数据卷。部署本项目时,只能操作固定资产系统这一套资源,不能影响 shebeiguanli-* 容器。

执行部署:

cd /opt/equipment-management
./deploy.sh

部署脚本默认会先备份,再重建固定资产系统容器,最后检查健康状态和另一套系统状态。

标准发布命令

在当前这台 Windows 开发机上,推荐直接使用:

$env:DEPLOY_HOST="<服务器地址>"
$env:DEPLOY_PASSWORD="<部署密码>"
.\scripts\publish-to-server.ps1

这个脚本会自动完成:

  • 检查 Git 工作树,默认拒绝发布未提交改动
  • 只打包后端、前端、下载清单和部署脚本等白名单文件
  • 校验下载清单引用的打印助手/驱动安装包,并把对应二进制纳入发布包
  • 上传到 /opt/equipment-management
  • 校验发布包并保留服务器上的自定义品牌文件
  • 只覆盖固定资产系统源码,不处理 shebeiguanli-*
  • 调用服务器上的安全部署脚本

常用参数:

.\scripts\publish-to-server.ps1 -DryRun
.\scripts\publish-to-server.ps1 -SkipDeploy
.\scripts\publish-to-server.ps1 -SkipBackup
.\scripts\publish-to-server.ps1 -DryRun -AllowDirty
  • -DryRun:只显示发布文件数量、体积和白名单,不创建压缩包、不连接服务器
  • -SkipDeploy:只同步代码,不执行服务器部署
  • -SkipBackup:执行部署,但跳过备份,不建议常用
  • -AllowDirty:显式允许应急发布未提交改动;仍只包含白名单文件,常规发布禁止使用

远端目录被强制锁定为 /opt/equipment-management,远端临时压缩包被锁定在 /tmp/equipment-management-release.tar.gz;即使误传参数,也不能覆盖 /opt/shebeiguanli 或其他目录。下载清单中 server_release / company_archive 类型引用的本地文件只要缺失,发布会在连接服务器前直接失败。

密码模式使用本机的 plink / pscp。建议设置 DEPLOY_HOST_KEY 固定服务器主机指纹;如果未设置,PuTTY 必须已经缓存并信任该主机密钥,否则批处理模式会安全失败。使用 SSH 密钥时走系统 OpenSSH,并使用 StrictHostKeyChecking=accept-new,不会再无条件关闭主机校验。

备份与回滚

执行备份:

cd /opt/equipment-management
./scripts/backup-equipment.sh

默认只保留最近 3 份备份,备份目录在 /opt/backups/equipment-management。详细说明见 BACKUP.md。

备份脚本不再提供数据库密码默认值。它会优先读取 DB_PASSWORD / MYSQL_ROOT_PASSWORD,未设置时只读获取 equipment-mysql 容器中的 MYSQL_ROOT_PASSWORD;仍无法取得时会直接终止备份,并且不会输出密码内容。

人员与组织同步

后端已预留钉钉中台同步能力,支持同步:

  • hr_groups -> 部门
  • hr_employee + hr_employee_register -> 使用者

同步接口:

GET  /api/sync/hr/preview
POST /api/sync/hr/run

这两个接口都只允许管理员访问。源库必须保持只读,不允许对 SQL Server 做写操作。

建议配置的环境变量:

SQLSERVER_HOST=<sqlserver-host>
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=<sqlserver-database>
SQLSERVER_USER=<sqlserver-user>
SQLSERVER_PASSWORD=<sqlserver-password>
SQLSERVER_ENCRYPT=false
SQLSERVER_TRUST_CERT=true
HR_SYNC_ENABLED=false
HR_SYNC_SCHEDULE=03:00
HR_SYNC_ALLOWED_STATUS_VALUES=3
HR_SYNC_INACTIVE_STATUS_VALUES=5
HR_SYNC_EXCLUDED_DEPARTMENTS=供应商,快递公司,外部交流
HR_SYNC_EXCLUDED_NAME_KEYWORDS=
  • HR_SYNC_ENABLED=true 时,后端会启动每日定时同步
  • HR_SYNC_SCHEDULE 建议使用 03:00
  • HR_SYNC_ALLOWED_STATUS_VALUES 用来标记“哪些源状态算正式员工”,当前建议 3
  • HR_SYNC_INACTIVE_STATUS_VALUES 用来标记源系统里的非在职状态码
  • 当前组织同步默认以 hr_employee_register 为主口径,hr_employee 只用于补充姓名、手机、邮箱、岗位等字段
  • HR_SYNC_EXCLUDED_DEPARTMENTS 用来排除供应商、快递公司等外部对象
  • HR_SYNC_EXCLUDED_NAME_KEYWORDS 可选,用来额外排除名字特征
  • 如果源库是较老版本 SQL Server,建议 SQLSERVER_ENCRYPT=false

当前线上资源

  • 前端:http://<server-host>
  • 后端:http://<server-host>:3000/api
  • 健康检查:http://<server-host>:3000/api/health

注意事项

  • 不要把真实密码、数据库连接串或生产环境地址提交到仓库。
  • 涉及 Prisma 模型调整时,先生成客户端,再验证相关接口。
  • 发布前默认执行备份,不建议跳过。
Description
由壹点「资产管理系统」
Readme 4 MiB
Languages
TypeScript 48.4%
Vue 29.7%
JavaScript 14.6%
C# 3.7%
CSS 1%
Other 2.5%