合同管家 Contract

面向个人与小微团队的轻量合同管理:把常用合同沉淀为「模板 + 字段」,生成合同时填表即得,一键打印或另存为 PDF

v0.2.0

界面预览

合同管家工作台(v0.2.0)
工作台:合同与模板一屏总览(v0.2.0)
合同模板列表(v0.2.0)
合同模板:富文本正文 + 自定义字段(v0.2.0)
合同列表(v0.2.0)
合同列表:草稿 / 生效 / 归档状态(v0.2.0)
填写合同(v0.2.0)
填写合同:填表单即得正文,金额大写自动转换(v0.2.0)
合同打印视图(v0.2.0)
打印视图:A4 版式 + 手写签名横线(v0.2.0)
数据备份(v0.2.0)
数据备份:快照备份、一键恢复与本地上传恢复(v0.2.0)
手机端合同列表(v0.2.0)
手机端合同列表(v0.2.0)
手机端工作台(v0.2.0)
手机端工作台(v0.2.0)

功能特性

📄

合同模板

富文本正文编辑,正文中插入自定义字段占位符(甲方名称、金额、日期……),整体保存为模板,可复制复用

🧩

字段设计

单行/多行文本、数字、日期、下拉选择;支持必填、半行宽、占位提示,字段可增删改与排序

✍️

填表生成合同

选模板 → 填表单 → 占位符自动代入,实时预览;留空字段渲染为下划线空位,打印后可手工补填

📸

快照存储

合同保存模板正文与字段定义的完整快照,模板后续修改或删除不影响已生成的合同

🔖

状态跟踪

草稿 → 生效 → 归档;签订日期与备注,支持关键字、状态、模板多维度筛选

🖨️

导出 PDF

独立 A4 版式打印视图,一键调起浏览器打印或「另存为 PDF」;手机端小屏自动收缩留白

🛡️

安全清洗

富文本保存前经白名单清洗,防止恶意内容;业务数据按用户隔离,多用户互不可见

🐂

飞牛一键登录

支持飞牛 fnOS NAS 账号一键登录,自动绑定或注册应用账号,手机与电脑共用同一份数据

🌗

明暗双主题

青瓷/翡翠品牌配色,深浅色主题切换;手机端填写页单栏切换,触控目标加大

技术架构

后端技术栈

  • Go - 高性能编译型语言
  • Gin - 轻量级 HTTP 框架
  • GORM - ORM 框架
  • SQLite (WAL) - 单文件数据库

前端技术栈

  • Vue 3 - 现代前端框架
  • TypeScript - 类型安全
  • Vite - 构建工具
  • Pinia - 状态管理
  • Tailwind CSS - 原子化样式

部署方式

  • 飞牛 NAS(fnOS)FPK 包(x86 / ARM)
  • Docker 多平台镜像
  • 二进制解压即用

合同管家基于 smallgo 应用框架实例化(框架家族第 5 个实例),登录认证、用户权限、系统配置、备份、审计日志、匿名统计、赞赏支持等公共能力全部继承框架,业务模块位于 server/contract/。

快速开始

飞牛 NAS 安装

  1. 下载对应架构的 techfunway-contract 安装包(.fpk,支持 x86 / arm64,下载地址)
  2. 打开飞牛 NAS 桌面 → 应用中心
  3. 点击右上角 手动安装,选择下载的 .fpk 文件
  4. 在安装向导中设置应用端口(默认 8911),点击完成
  5. 安装完成后打开应用,首个注册用户自动成为管理员;也可以直接使用飞牛 NAS 账号一键登录

Docker 运行

docker run -d \
  --name techfunway-contract \
  -p 8911:8911 \
  -v contract-data:/app/data \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  techfunways/contract:v0.2.0

docker-compose.yaml

services:
  contract:
    image: techfunways/contract:v0.2.0
    container_name: techfunway-contract
    restart: unless-stopped
    ports:
      - "8911:8911"
    volumes:
      - contract-data:/app/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  contract-data:

数据库、上传文件与运行日志都存放在数据卷 contract-data(容器内 /app/data),重建或升级容器不会丢失合同数据。想跟随新版本自动更新可用 techfunways/contract:latest(配合 Watchtower,发行目录里的 docker-compose.latest.yml)。

二进制直接运行

解压对应平台的发布压缩包后,按下面的命令启动:

# Linux / macOS
./contract -data-dir ./data -port 8911

启动后浏览器访问 http://localhost:8911,首个注册用户自动成为管理员。合同数据存储于 data/db/contract.db(SQLite,WAL 模式)。

💡 提示:首次进入模板列表会自动内置一套示例模板,可以直接修改成自己的常用合同。生成合同时留空的字段会渲染为下划线空位,打印出来后手工补填即可。

端口与仓库信息

默认端口 8911(HTTP,安装向导、-port 参数或 PORT 环境变量均可修改)
容器名 techfunway-contract
数据卷 contract-data → 容器内 /app/data(数据库、上传文件、日志)
Docker 镜像 techfunways/contract(多平台,端口 8911)
fnOS 包名 techfunway-contract(桌面显示名「合同管家」)
源码仓库 TechFunWay/contract(Go + Gin + GORM + SQLite / Vue 3 + TypeScript)
运行数据 data/db/contract.db(SQLite WAL),管理员可下载数据库快照备份
上游框架 smallgo,后端模块名为 smallgo/server

更新日志

v0.2.0 2026-09-28
  • 应用中心改为新页面打开:点应用图标直接在浏览器新标签页打开,不再在飞牛桌面窗口里内嵌打开;只有点「使用飞牛 NAS 登录」时才弹出授权窗口,当前页面不跳走
  • 飞牛登录重做:网关域会话认人——从飞牛打开应用自动带上飞牛登录态,刷新不掉线、接口不再报 401;手机端授权链路补齐,修复飞牛手机 App 点图标打不开(ERR_CONNECTION_CLOSED)
  • 备份支持本地上传恢复:上传 .db 备份文件即可恢复,换机迁移与误删找回不必手动拷库
  • 手机端布局紧凑化,管理表格改为卡片列表;修复手机端横向溢出与用户管理表格排版
  • 图标重绘为 3D 玻璃立体风格;安装包修正启动命令与产物命名(文件名带版本号、架构标 x86)
v0.1.0 2026-09-19
  • 首个版本:合同模板管理(富文本正文 + 自定义表单字段,保存为模板可复用)
  • 按模板填写生成合同,正文占位符自动代入,留空渲染为手写空位
  • 合同快照存储,模板后续修改不影响已生成的合同
  • 独立打印视图(A4 版式),一键调起浏览器打印或另存为 PDF
  • 继承框架全部公共能力:登录认证、飞牛 NAS 一键登录、用户权限、备份、审计、赞赏支持、版本检查

常见问题

如何修改端口?

飞牛 NAS 安装时可在向导中设置端口(默认 8911)。Docker 方式通过 -p 参数映射端口。二进制方式通过 -port 参数指定端口。

模板改了,已生成的合同会跟着变吗?

不会。合同创建时会整体拷贝模板正文与字段定义作为快照,之后模板怎么修改、甚至删除,都不影响已生成的合同;打印页也只读这份快照。

怎么导出 PDF?

打开合同的打印视图(A4 版式),使用浏览器打印功能,目标打印机选择「另存为 PDF」即可;手机浏览器同样支持。

数据存在哪里,会上传吗?

所有数据都保存在本地 SQLite 数据库(data/db/contract.db),不上传云端;数据按用户隔离,多用户互不可见。备份数据目录即可,管理员也可以在应用内下载数据库快照。应用内置的匿名使用统计只上报版本与部署形态等设备信息,可在系统配置中关闭。