我在做一个感知设备安装项目,日常有几类数据要来回倒腾:
试过在线表单和 SaaS,问题是:数据放在别人服务器上,项目部不同意;而且要按人数收费,一年几千块。真正想要的其实很简单:一个内网网址,电脑手机都能开,数据在自己机器上。
于是我做了个决定:拿一台正在用的办公电脑当服务器,让 AI 帮我从零写一个平台。
动手前我实测了自己那台工作机,结论是完全够用,这也是本文最想破除的一个误解:
项目 | 实测值 | 平台实际占用 |
|---|---|---|
C 盘 | 474.7 GB,剩余 309.6 GB | 程序本体 < 1 MB |
D 盘 | 1.82 TB 剩余 | 拿来做备份盘 |
内存 | 15.6 GB | 服务常驻 < 100 MB |
网络 | WiFi 6,内网 192.168.77.57 | 局域网内访问 |
一个 Node 服务跑起来,内存占用不到 100 MB,对一台办公机毫无压力。真正需要处理的不是性能,而是三个"办公机特有"的毛病:
这台机器白天还是要带去工地,人一走服务就断。所以我的规划是:先用它把平台跑起来验证,后面买台几百块的小主机 7×24 开机,整个目录打包复制过去,十分钟迁完。
我给 AI 提的约束只有一句话:我不是运维,出问题必须能自己修。于是定下三条:
npm install 都不需要,拷到任何一台装了 Node 的电脑就能跑。目录结构一眼能看懂:
为什么要串行写队列:两个人同时保存,两个异步写交错就会互相覆盖。把所有写操作串成一条链,天然排掉并发。
这是我做得最值的一个设计。同一个 index.html,能在三种环境自动切换:
好处是:服务器没开时页面不会白屏报错,而是降级成本地模式继续能录数据;等服务器起来了,数据再合并回去。业务连续性不依赖运维水平。
真实场景里,误删一条发文记录比系统宕机更麻烦。所以:登记免密、删除要密码、删了还能找回。
这是卡了我最久的一个坑。用 UTF-8 写的 bat,双击后 cmd 满屏「'X' 不是内部或外部命令」——cmd 按 GBK 逐行解析,中文全变乱码命令。chcp 65001 也救不了(逐行读取时编码切换有偏移)。
正确做法是用 Python 强制以 GBK 写出:
顺带一提,防火墙放行规则名要用纯 ASCII(如 FaWenQianShou-8080),否则 netsh 参数也会乱码。
table-layout: fixed,我只给部分列设了宽度,结果唯一没设宽的列被挤成 16px,操作列 overflow: hidden 又把「删除」裁掉了。 → 铁律:fixed 布局必须每一列都给宽度,别留 auto;操作列用 position: sticky; right: 0 永远可见。window.__SMART_PAGE__.database,注入时机晚一点就永远 undefined。 → 改成轮询等待(最多 5 秒),并保留本地降级模式。data.json 后一保存就被内存里的旧值覆盖。 → 要么走 API 改,要么改完重启服务。<link rel="icon" href="data:,"> 即可消除,别让它淹没真正的报错。布局问题我最后是用 puppeteer-core + 本机 Edge 无头模式,逐列量 getBoundingClientRect() 和 scrollWidth 定位的——比肉眼截图靠谱得多,哪个列被截断一量就知道。
第一批已经跑起来了:内网打开 http://10.10.17.250:8080,发文登记、附件上传(方案 PDF 直接挂)、超期未签收标红、删除要密码、删除自动备份。手机上也能开,只是表格要横滑。
第二批开始按模块扩展,每批都复用同一套骨架(权限、导出、备份全是现成的):现场照片台账 → 设备材料清单(设计量/到货量/安装量三栏自动算差) → 施工进度日报(自动汇周报) → 设备出入库。
最关键的一条经验:先做"统一主数据 + 统一编号规则"这层地基。 单位名录、点位库、设备型号库只维护一次,五个模块全部下拉引用。不这么做,三个月后一定会出现"同一个船闸在发文里叫白石窑、在日报里叫白窑"这种对不上账的局面,然后推倒重来。
这次全程是让 AI 写的代码,几点体会:
搭内部系统真正的门槛从来不是技术,而是"有没有人愿意为你花两周写 CRUD"。 现在这个门槛被抹平了:硬件用现成的、软件零依赖零成本、代码让 AI 写、运维只需双击一个 bat。
如果你的团队也在用 Excel + 微信群管项目,不妨从最小的一个模块开始试——比如先把"发文签收"做成能登记、能预警、能导出的一张网页。跑通一个,后面的模块就是复制粘贴的事。
(本文是系列第一篇,第二篇会讲多模块扩展与主数据设计,欢迎关注。)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。