40人小公司从零搭一套OA+手机App,我是怎么过的坑(全过程实战)

📅 2026/8/27 9:32:25
40人小公司从零搭一套OA+手机App,我是怎么过的坑(全过程实战)
本文40人左右的企业没有纸质证书老板一人搞了个OA。我从零开始把OA网页、Flutter App、iPhone免钱方案全搞定。这篇文章说完了踩过的坑、做过的取舍给同样在中小企业做内部系统的人参考。一、背景为什么公司要自建OA公司规模40人左右内部管理靠纸质表格、微信群、Excel排班。问题一堆请假单要跑几个办公室签字老板不在就卡住审批记录靠翻聊天记录对不上账订餐靠群里报统计全靠人工扫码核销没有工具当时需求很直接不做大而全的商用OA太贵、太重、员工不配合就要一个打开就能用、手机能操作的轻量系统。需求范围定下来请假/审批流多模板、自动流转、线上审批订餐每天自动统计、短信提醒加班管理、公告消息扫码核销手机场景手机App安卓为主iPhone也要能用二、技术选型不追新只求稳环节选型理由后端Python Flask单人可维护数据库SQLite 起步数据量小够用前端服务端渲染原生HTMLJS不引框架老电脑也流畅手机AppFlutter一套代码双端部署云服务器ECS Nginx HTTPS内外网都能访问分发自建下载页 二维码不上应用商店成本为零核心思路一套代码、一个域名、一个后台员工只用一个入口。三、部署架构三台机器分工 一台云服务器3.1内网三台机器分工机器职责19端生产环境日常业务98端测试环境新功能验证83端热备实时同步生产生产代码在测试机验证通过再部署到生产机热备机实时同步出问题可以快速切换。3.2云端服务器对外统一走云服务器Nginx 反向代理 HTTPShttps://oa.域名 → 5003 网页端 APIhttps://order.域名 → 5000 订单系统https://api.域名 → 5000 开放接口SSL 证书 Lets Encrypt 自动续期不用人工管。四、网页端核心设计4.1表单模板 流程模板分离审批流最核心的设计表单模板定义填什么流程模板定义谁来批。请假类型、审批规则3.5天自动加批老板全部模板化年假最小单位0.5天、其他假最小1小时0.125天加新的审批类型 加一个模板不动代码4.2审批全生命周期申请 → 提交 → 主管审批 → 老板审批 → 通过/驳回 → 电子单据PDF支持撤回、驳回重提、指定审批人、审批记录留痕。4.3扫码核销的HTTPS坑网页端调摄像头做扫码核销浏览器必须HTTPS才能调摄像头权限。所以单独开一个HTTPS端口5004专门给扫码页其他页面走HTTP5003。这个坑不踩不知道一踩要改半天。五、Flutter App从零到正式发布5.1为什么选Flutter一套代码出安卓iOS打包快改动及时分发正式签名后可覆盖安装5.2固定连云端App 固定连接 https://oa.域名/api/v1不依赖内网家里也能审批。5.3正式签名易被忽视的坑用 keytool 生成 PKCS12 证书.p12有效期25年配置 key.properties 签名证书密码必须多重备份丢了App就覆盖不了只能卸载重装同事已装的会被重置5.4版本号两处同步的坑登录页底部显示 版本 vX.X.X这个和 pubspec.yaml 的 version是两处。漏改一处同事反馈版本号没变排查半天。5.5发版SOP固定流程改代码 → flutter analyze → 打包release → 本地验证→ 上传服务器 → 更新下载页 → 同事扫码下载APK 命名带版本号OA_App_v1.5.0_正式版.apk旧版删除防混淆。六、iPhone怎么办不花钱的PWA方案老板和同事都有iPhone。原生iOS App需要Mac 苹果开发者账号年费688 上架审核公司不想花这个钱。于是用了PWA把网页版做成可安装到主屏幕的Web App用起来跟App一样。6.1需要做的东西项目说明manifest.json配置全屏、独立窗口apple-touch-iconiPhone主屏幕图标启动画面6种尺寸适配不同iPhonetheme-color状态栏颜色安装引导页图文二维码教同事加主屏幕6.2关键meta标签meta nameapple-mobile-web-app-capable contentyesmeta nameapple-mobile-web-app-status-bar-style contentblack-translucentmeta nameapple-mobile-web-app-title contentOAmeta nametheme-color content#3e2723link relapple-touch-icon href/static/pwa/apple-touch-icon-180.png6.3启动画面适配iPhone机型太多启动画面按尺寸用 media 查询匹配覆盖6种主流机型750x1334 / 1125x2436 / 1170x2532 / 1242x2688 / 1290x2796 / 1284x2778。6.4下载页双Tab分流安卓显示APK下载二维码iPhone显示安装指南微信内打开提示浏览器打开微信不让下载iOS设备自动切到iPhone面板同事打开下载页iPhone自动显示添加到主屏幕指引看起来就是原生App。七、踩坑总结每条都值钱微信内无法下载APK → 下载页做微信提示引导扫码核销必须HTTPS → 单独开HTTPS端口APK版本号两处不一致 → 发版清单化签名证书丢失无法升级 → 多重备份PWA不更新 → 设置 scope /发版提醒同事刷新旧版本APK混淆 → 命名带版本号删旧版模板改了不生效 → 改模板必须重启服务验证八、架构演进从能跑到稳定第一步单体Flask SQLite够用就行第二步云服务器 Nginx反代 HTTPS 热备第三步App端 PWA 下载体系 SOP化每一阶段都围绕同事用得顺、老板看得见推进没有为了技术而技术。九、给同样处境的人的建议别一上来就上大框架SQLite能跑先跑审批流模板化设计以后加流程只加模板App签名证书第一时间备份丢了就完蛋发版清单化、SOP化不要靠记性iPhone用户别急着买MacPWA方案0成本先用如果你也在做类似的企业内部系统欢迎评论区交流。踩过的坑、走过的路都在这里了希望帮你少走弯路。公司真实搭建欢迎讨论