170 lines
5.9 KiB
Markdown
170 lines
5.9 KiB
Markdown
# 固定资产管理系统
|
||
|
||
这是一个前后端分离的固定资产管理系统,覆盖资产台账、借用归还、扫码出入库、挂载关系、维修、报废、统计分析和系统设置等功能。
|
||
|
||
## 技术栈
|
||
|
||
- 前端: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`:备份与回滚说明
|
||
|
||
## 本地开发
|
||
|
||
先复制环境变量模板:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
分别安装依赖:
|
||
|
||
```bash
|
||
cd frontend && npm install
|
||
cd backend && npm install
|
||
```
|
||
|
||
常用命令:
|
||
|
||
```bash
|
||
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-*` 容器。
|
||
|
||
执行部署:
|
||
|
||
```bash
|
||
cd /opt/equipment-management
|
||
./deploy.sh
|
||
```
|
||
|
||
部署脚本默认会先备份,再重建固定资产系统容器,最后检查健康状态和另一套系统状态。
|
||
|
||
## 标准发布命令
|
||
|
||
在当前这台 Windows 开发机上,推荐直接使用:
|
||
|
||
```powershell
|
||
$env:DEPLOY_HOST="<服务器地址>"
|
||
$env:DEPLOY_PASSWORD="<部署密码>"
|
||
.\scripts\publish-to-server.ps1
|
||
```
|
||
|
||
这个脚本会自动完成:
|
||
|
||
- 检查 Git 工作树,默认拒绝发布未提交改动
|
||
- 只打包后端、前端、下载清单和部署脚本等白名单文件
|
||
- 校验下载清单引用的打印助手/驱动安装包,并把对应二进制纳入发布包
|
||
- 上传到 `/opt/equipment-management`
|
||
- 校验发布包并保留服务器上的自定义品牌文件
|
||
- 只覆盖固定资产系统源码,不处理 `shebeiguanli-*`
|
||
- 调用服务器上的安全部署脚本
|
||
|
||
常用参数:
|
||
|
||
```powershell
|
||
.\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`,不会再无条件关闭主机校验。
|
||
|
||
## 备份与回滚
|
||
|
||
执行备份:
|
||
|
||
```bash
|
||
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` -> 使用者
|
||
|
||
同步接口:
|
||
|
||
```bash
|
||
GET /api/sync/hr/preview
|
||
POST /api/sync/hr/run
|
||
```
|
||
|
||
这两个接口都只允许管理员访问。源库必须保持只读,不允许对 SQL Server 做写操作。
|
||
|
||
建议配置的环境变量:
|
||
|
||
```bash
|
||
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 模型调整时,先生成客户端,再验证相关接口。
|
||
- 发布前默认执行备份,不建议跳过。
|