Skip to content

Repository files navigation

logo

物业账单管家 · Property Billing System

面向物业管理公司的轻量化综合账单系统
多表计抄表 · 自动追溯上期读数 · 一键生成含电子公章的催款单 · 打印 / PDF / 图片导出

Node Zero Dependencies License Platform

中文 | English


装好 Node.js 即可运行,无需 npm install、无需构建、零第三方依赖。数据为本地 JSON 文件,复制目录即完成备份。适合小区物业、商铺园区、二房东等需要按月出账单 / 催款单的场景。

✨ 特性一览

  • 🧾 一份账单自动汇总全费用 — 月租金 + 停车费 + 垃圾清运费 + 所有水 / 电表费用,一键生成
  • 💧 一户多表计 — 每个租户可绑定多个水表、多个电表,单价独立设置
  • 🔁 抄表自动追溯 — 自动调取上月读数计算 用量 = 本期读数 − 上月读数,读数异常自动提醒
  • 📥 Excel 一键导入 — 下载模板填好数据直接导入租户、表计、抄表,也兼容旧版「电费 / 水费」宽表格式
  • 🏛️ 电子公章 + 收款码 — 公章自动叠加到账单落款,微信 / 支付宝收款码显示在付款指引区
  • 💴 人民币大写金额 — 账单含「叁仟贰佰壹拾元整」式大写,专业规范
  • 📤 三种输出方式 — 浏览器打印 / 另存 PDF、导出 PNG 图片(适合微信发送)、复制纯文本催款话术
  • 📱 响应式界面 — 手写类 Tailwind 风格 CSS,电脑和手机都能用
  • 🐳 一键部署 — 支持 Docker、宝塔 / 云服务器(阿里云、腾讯云轻量等)、PM2 守护进程
  • 💾 零依赖 + 文件持久化 — 三个 JSON 文件存全部数据,维护成本极低

📸 界面预览

工作台 租户管理 抄表录入
dashboard tenants readings
账单生成 公司设置 完整账单(含公章)
bills settings bill

未抄表场景会明确标注并跳过该表计金额:missing

🚀 快速开始

Windows 直接运行

双击 start.bat,或手动执行:

node server.js

浏览器打开 http://localhost:3000 即可使用。

Docker 一键部署

docker compose up -d

或手动构建运行:

docker build -t property-billing .
docker run -d -p 3000:3000 -v $(pwd)/data:/app/data --name property-billing property-billing

数据通过 data/ 卷持久化,升级镜像不影响账单数据。

宝塔面板 / 云服务器(阿里云、腾讯云轻量等)

  1. 将整个项目目录上传至服务器(如 /opt/property-billing)
  2. 安装 Node.js(>= 18)
  3. 使用 PM2 守护进程:pm2 start server.js --name property-billing
  4. 在宝塔「网站」中新建反向代理:http://127.0.0.1:3000,绑定域名即可
  5. 建议同时启用 HTTPS 证书

🧩 功能详解

1. 公司基础配置

  • 公司名称、联系电话、收款银行信息(户名 / 开户行 / 账号)
  • 微信收款码、支付宝收款码上传(显示在账单付款指引区)
  • 电子公章上传(推荐透明底 PNG),自动叠加在账单右下角落款处
  • 付款截止天数、催款提示语、页脚说明均可自定义

2. 租户管理(CRUD)

  • 租户姓名 / 公司名、位置 / 房号 / 铺位号、联系电话、合同起止时间
  • 每户独立配置固定费用:月租金、停车费、垃圾清运费(元 / 月)
  • 每户可绑定多个水表 + 多个电表,表计名称 / 编号、单价(元 / 度、元 / 吨)独立设置
  • 工作台自动提醒未来 60 天到期的合同

3. 月度抄表与数据追溯

  • 按月份批量 / 单独录入各表计本期读数与抄表时间
  • 自动调取该表计上期(上月)读数并计算:本期用量 = 本期读数 − 上月读数,表计金额 = 用量 × 单价
  • 首次抄表期初按 0 计并明确标注;读数低于上期会给出异常提示
  • 抄表数据支持整月清空与重新录入

4. 账单自动生成与催款单样式

选择月份后一键汇总该租户全部费用(租金 + 停车费 + 垃圾清运费 + 所有表计费用),账单包含:

  1. 抬头:公司名称、账单编号、账单月份、生成时间
  2. 租户信息:名称、位置 / 房号、电话、合同期间
  3. 固定费用明细:项目、收费标准、本期金额
  4. 水 / 电费抄表明细表(逐表列出):表计名称、类型、抄表时间、上月期初读数(含来源月份)、本期期末读数、实际用量、单价、费用小计
  5. 汇总:本期应缴总金额(人民币大写 + 小写)、固定费用合计、水 / 电费合计
  6. 付款指引:收款账户、微信 / 支付宝收款码、付款截止日期、催款提示语
  7. 落款:电子公章(图片叠加)、公司联系电话

输出方式:一键打印 / 导出 PDF(浏览器打印对话框选择「另存为 PDF」)、导出 PNG 图片(适合微信发送)、复制催款文本(纯文本账单,直接粘贴微信)。

5. Excel 数据导入

针对已用 Excel 管理台账的物业公司,提供「下载模板 → 填写数据 → 一键导入」流程,无需逐个录入:

  1. 下载模板:管理端「Excel 导入」页下载 数据导入模板.xlsx,包含四个工作表:
    • 公司设置:公司名称、电话、开户行、收款账号、付款截止天数、催款提示语等
    • 租户信息:租户名称、位置/房号/铺位、电话、合同起止、租金、停车费、垃圾清运费
    • 表计配置:租户名称、表计名称、类型(电表/水表)、单价
    • 抄表数据:租户名称、表计名称、抄表月份(YYYY-MM)、本期读数、抄表时间
  2. 上传导入:支持两种模式——合并导入(按名称新增/更新,抄表按「表计+月份」覆盖,可重复导入不产生重复数据)和清空后导入(先删除全部现有租户与抄表)。
  3. 兼容旧表:直接上传旧版「电费 / 水费」宽表(名称 / 收费标准 / 期初 / 各月读数列),自动按年份与租户拆分表计,无需改造原表。

导入完成后立即生成月度账单,金额计算与手工录入完全一致。

🛠 技术选型

本系统采用零依赖 Node.js + 原生响应式前端 + JSON 文件持久化,刻意不引入 npm 依赖与构建步骤:

  • 无需 npm install、无需编译,装好 Node.js 即可运行,维护成本极低
  • 数据为 data/ 下的三个 JSON 文件,备份 = 复制目录,适合轻量管理场景
  • 前端使用手写响应式 CSS(类 Tailwind 风格),电脑 / 手机均可使用
  • 账单图片导出基于浏览器原生 SVG → Canvas 能力,无第三方库
  • 如需迁移到 MySQL / PostgreSQL,只需替换 server.js 中的存储层与 saveJson 调用

⚙️ 配置与数据

环境变量 说明 默认值
PORT 服务端口 3000
HOST 监听地址 0.0.0.0
DATA_DIR 数据目录(便于 Docker 挂载) ./data

data/ 目录下的文件:

  • settings.json — 公司信息、收款码、电子公章
  • tenants.json — 租户及表计配置
  • readings.json — 全部抄表记录(表计名称 / 单价随记录快照保存,历史账单不受后续改价影响)

备份:停止服务后复制 data/ 目录即可;恢复时放回同名目录。

🔌 主要 API

方法 路径 说明
GET /api/health 健康检查
GET /api/months 已有数据的月份列表(含当前月)
GET / PUT /api/settings 读取 / 更新公司设置(含收款码、公章)
GET / POST /api/tenants 租户列表 / 新增租户
GET / PUT / DELETE /api/tenants/:id 租户详情 / 更新 / 删除(级联删除抄表)
GET /api/readings?month=YYYY-MM 某月抄表全量数据(含上期读数)
POST /api/readings/batch 批量保存抄表
DELETE /api/readings?month=YYYY-MM 清空某月抄表
GET /api/bill?tenantId=&month= 单户完整账单数据
GET /api/bills/summary?month= 月度全户应收汇总
GET /api/dashboard?month= 工作台统计
GET /api/import/template 下载 Excel 导入模板
POST /api/import?mode=merge|replace&year= 上传 XLSX 并导入(支持官方模板与旧版电费/水费表)

📁 目录结构

property-billing-system/
├── server.js          # 零依赖 HTTP 服务(API + 静态资源)
├── lib/               # xlsx 读写与 Excel 导入逻辑(零依赖)
├── public/            # 前端页面
│   ├── index.html     # 管理端(工作台/租户/抄表/账单/设置)
│   ├── bill.html      # A4 账单 / 催款单(打印、PDF、图片导出)
│   ├── css/style.css
│   └── js/            # app.js(管理端逻辑)、util.js(大写金额等)
├── data/              # 运行后自动生成的数据文件(备份此目录)
├── previews/          # 界面预览截图
├── Dockerfile         # 一键容器化部署
├── docker-compose.yml
└── start.bat          # Windows 一键启动

🔒 安全提示

本系统定位为物业公司内部工具,默认不内置登录认证。部署到公网时请务必:

  • 通过宝塔 / Nginx 反向代理添加 Basic Auth 或访问白名单
  • 开启 HTTPS
  • 或仅在公司内网使用(HOST=127.0.0.1 时仅本机可访问)

🗺 路线图

  • 多公司 / 多账套支持
  • 账单历史归档与按租户查询
  • 微信 / 短信自动推送账单
  • 导出 Excel 应收明细
  • 接入数据库(MySQL / PostgreSQL)存储层

☕ 打赏支持

如果这个项目对你有帮助,那么可以请我喝杯咖啡,欢迎打赏支持 ☕ 每一份支持都是持续维护与开发的动力。

📄 许可证

本项目采用 MIT 许可证 开源。


English Abstract

Property Billing System — a lightweight, zero-dependency property & tenant billing manager built with vanilla Node.js (no npm install, no build step). It supports multi-meter management (multiple water/electricity meters per tenant), automatic carry-over of previous readings, one-click generation of payment demand notes with e-seal and QR payment codes, and export via print / PDF / PNG. Data is persisted as JSON files. Runs on Node.js >= 18, Docker, or any cloud server.

About

轻量化物业与租户综合账单管理系统:多表计抄表自动追溯、Excel 一键导入、电子公章催款单、打印/PDF/图片导出 | Lightweight property & tenant billing system: multi-meter readings with auto tracking, one-click Excel import, e-seal payment notes, print/PDF/PNG export

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages