在 Alistera CRM 中,我把空间、合同、发票和付款分开。办公室可能已经被占用,发票已经开出,但钱还没到账。要看清业务如何运行,就必须把这些状态关联起来,同时保留彼此的区别。

我为 Alistera 构建了独立的运营 CRM,包含空间目录、合同、发票、付款、计划和访问管理。它与公开网站和游戏并列,是独立的产品:各有用途,也各有自己的数据。

这个屏幕展示虚构办公室、它们的状态及租赁关系。这是目录界面的工作示例,不代表 Alistera 当前可租空间。

办公室目录

归档界面 · 演示数据

办公室目录
已保存的项目画面 · 无交互控件

空间也有时间维度

目录包含 93 个条目:71 间办公室、12 个工位和 10 处公共空间。但只有列表还不够。“空间是否可用?”这个问题需要日期或时间区间。同一间办公室可能今天被占用,一个月后可用。

因此,合同与时间区间关联,数据变化时必须检查重叠。日历帮助人看到冲突;服务器端校验则防止两个同时打开的标签页制造冲突。

发票是请求,付款是事件

财务模型将开票金额、确认付款及其分配分开。部分付款不一定结清整张发票。一次转账可能需要分配到多项义务。单独一个“状态”字段无法可靠替代这些关系。

下面展示演示发票和付款记录。可以查看界面如何区分应履行的义务与实际到账,而无需使用真实财务数据。

发票与付款

归档界面 · 演示数据

发票与付款
已保存的项目画面 · 无交互控件

金额以菲尔为单位,用整数存储。这避免了金额相加、比较时常见的浮点运算意外。这一选择本身不能修好会计工作,只是去掉了一个不必要的错误来源。

财务操作历史会保留。更正应当说明改了什么,而不是假装之前的状态从未存在。企业有时需要昨天不太好看的真相,而不是今天被整理得完美无瑕的表格。

工作不止于界面

应用使用 React、Vite、Cloudflare Worker 和 D1。登录与个人资料连接权限系统;权限在 API 端检查,而不仅是隐藏按钮。计划可以用列表、看板或甘特图查看。视图不同,任务必须保持一致。

实现了 CRM 并不能证明整个企业已经用它处理日常运营。在经过验证的阶段,我可以展示模型、功能和技术检查;不会虚构使用量或节省时间的数字。

这一阶段实现了目录、合同、财务记录和计划。可以通过演示办公室和发票查看。全面用于日常工作、衡量对团队的价值,是另一个阶段,因此这里没有使用量或节省时间的数据。

相关故事:控制与报告版本 · Alistera 官方网站。