缘起
一次办公室搬迁之后要盘一遍全部资产。拿到手的是一张三年没合拢的表:同一台显示器在三行里写着三个名字,谁领走了没地方查,用了几年该折多少钱没人算得清。盘到第三天还剩半个仓没数完。
那天晚上我建的不是第四张 Excel,是第一个数据模型。
背景
后来我把一句话逮着人就问:"你们公司现在有多少台设备?"十来个老板,九个答不上来。答上来的那个,台账也已经废了。
这类公司的画像很具体:二十到五十人,设备几十台。资产全靠 Excel 加微信群管着,老板自己知道乱,但不知道乱到什么程度——有员工离职带走了电脑,HR 三个月后盘点才发现;到了审计或者汇算清缴,财务拿着账来问,答不上来。数字还各记在各处:台账在行政的表里,领用条在纸上,折旧在财务的另一次计算里,三边对不上时没人能说是哪一环漏了。
他也想过买系统。一看报价,几万到几十万,心里盘算"就管几十台电脑值这么多钱吗";真买过的,实施周期长,上线之后没人用。
规模过了几百件,靠一张表已经守不住准确性。真正需要的不是一套更复杂的系统,而是一套把建档、领用、调拨、盘点、折旧串在同一条记录链上的轻量工具;而且数据要躺在自己机房里——中小企业要的是踏实,方便是次要的。
方案
按资产从买到废的那条线来组织,每一步都留下记录,下一步直接用上一步的结果:
- 采购入库:从采购申请、审批到分批验收入库;验收完成后自动生成资产编码,同一批买五台显示器就是五条独立可追溯的资产,耗材类另行处理不参与折旧
- 资产台账:一条记录同时带着财务信息(采购价、折旧)、归属信息(部门、使用人、存放位置)和实物信息(品牌、型号、序列号、图片附件);支持多条件检索与二维码标签
- 领用归还:员工提交申请、管理员审批后资产归属自动跟着走,归还后回到闲置并清空使用人;借用期间资产被锁住,两个人同时申领同一台不会重复放行
- 调拨管理:跨部门转移一张单子走完,批准后部门归属与存放位置自动同步
- 维修保养:登记维修时资产自动标记为"维修中",完成后自动回闲置;保养可设下次到期日,三十天内到期自动提醒
- 资产盘点:按全部、部门、分类、位置四种范围生成盘点任务,逐项确认后自动算盈亏;现场用手机扫资产标签就能盘,可拍照留证
- 折旧管理:按直线法按月计提,重复计算自动跳过,累计折旧不会超过可折旧金额;单台资产可暂停或恢复
- 资产处置:报废、变卖、捐赠三种方式走申请与审批,已处置的资产不能再处置一次
- 配件与耗材:配件记录装在哪台设备上、什么时候拆下来的,拆下可选报废、回库或送修;耗材领用自动扣减库存,库存不够直接拦住
- 标签与单据:资产标签和申购单、领用单、调拨单、盘点明细、维修单都有对应打印视图,标签与标识卡可在模板间切换
- 权限与留痕:管理员、资产管理员、普通用户三种预置角色,也可以自定义;所有写操作和登录都留下日志
手机端不是管理端的缩小版,而是现场工具:扫码盘点、维修保养登记、配件与耗材更换、调拨申请与审批。管理员在电脑上定规矩,人在仓库里用手机干活。
技术架构
| 模块 | 技术选型 |
|---|---|
| 后端 | Go + Gin + GORM + JWT + bcrypt |
| 数据库 | SQLite(默认,WAL 模式)+ MySQL(可切换) |
| PC 端 | Vue3 + Vite + Element Plus + ECharts + Pinia |
| 移动端 | Vue3 + Vant UI(独立构建,后端托管在 /m/) |
| 交付 | 单二进制 + 静态产物打包;Windows / Linux / Docker 三套部署形态 |
规模与机制:34 张数据表、165 个 RESTful 接口、64 个权限码、PC 端 32 个页面、移动端 22 个页面。前后端双重权限校验(前端路由守卫 + 后端中间件),权限分 api 与 button 两类。数据库层用 GORM 自动迁移建表并初始化种子数据,SQLite 走 WAL 提升并发读写,外键约束在迁移期间临时关闭以避免重建表失败。
商业交付层是这块的重点:品牌配置(系统名 / 副标题 / Logo / Favicon)在构建时编进二进制,同一份代码可以打出不同客户的白标包;三档授权(免费 / 基础 / 专业)由本地 HMAC 验签的凭证控制,凭证与机器指纹绑定,判定在客户端本地完成、不回访服务器,客户机器可长期离线运行;签发侧是一个独立的激活服务加一个命令行签发工具,激活台账单独入库、每日备份。
工程方法:需求全部走 openspec 文档驱动——27 个待办变更、61 个已归档变更、64 份能力规格,一个变更只管一个行为,批准后才动代码,一次提交对应一个变更集,所以 git log 可以直接当开发日志读。核心链路有单元测试兜底,采购入库、标签打印、新手引导这类整条流程用真实浏览器端到端跑通后才归档。资产锁定的竞态是人工蹲在业务流里定位并修掉的——这类问题靠"顺手重构"解决不了。
成果
起点是三年前那张没合拢的 Excel,现在客户机房里跑着一套写着他自己公司名字的系统——同一份代码配上客户的一份品牌配置,编译时一起打进去,登录页和标题栏上都是他们的名字。系统已作为商业项目交付上线,公开的演示环境可以直接进去走一遍。
真正让它成交的不是功能列表,是数据进来的那一刻。客户把旧台账导进来才算了结:500 多条历史记录,光"IT部"这一个部门,老板自己在旧表里就写成了 5 个不同的名字,字段也对不上;导入做成逐行报错,哪一行、哪一列、为什么错都指出来。客户第一次一次性导完、系统里立刻能扫码盘点,这单才落地。
客户还提过一句我印象很深的话:「能不能不打印二维码?」照着做就是删掉二维码,可财务拿着标签还是要扫码盘点。追问两轮才明白,他要的是一张符合财务习惯的固定资产标识卡——编号、名称、部门、使用人,带下划线那种。最后没给这家单独做,而是把标签改成了模板:一个二维码版、一个表单卡版,全局可切换,后来顺着长出更多纸型,横竖都能打。客户随口一句偏好,长成了一套能配的东西。
客户是从内容来的。最早找上门的企业客户,就是从一篇讲固定资产台账烂尾的笔记私信过来的。
这套东西现在能卖成三种形态:装在客户自己机房的白标系统、配部署手册的安装包,以及已经办下来的软件著作权登记。三种形态共用同一份代码,只是打包时注入的品牌配置不同。
体验
- 电脑端:asset.bennywen.xyz
- 移动端(建议手机打开):asset.bennywen.xyz/m
- 演示账号:
admin/admin123
