GuDingZiChan/README.md

170 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 固定资产管理系统
这是一个前后端分离的固定资产管理系统,覆盖资产台账、借用归还、扫码出入库、挂载关系、维修、报废、统计分析和系统设置等功能。
## 技术栈
- 前端: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 模型调整时,先生成客户端,再验证相关接口。
- 发布前默认执行备份,不建议跳过。