合同流转审批系统
这是一个基于 Next.js 的合同流转审批系统。
如何启动服务
开发环境
-
安装依赖:
npm install -
启动开发服务:
npm run dev服务将在
http://localhost:3000上运行。
生产环境
-
安装依赖:
npm install -
构建项目:
npm run build -
启动生产服务:
npm run start服务将在
http://localhost:3000上运行。
部署到服务器
-
环境要求:
- Node.js >= 18.x
- 一个用于运行 Node.js 应用的进程管理器,如 PM2。
-
部署步骤:
- 将项目代码上传到服务器。
- 在服务器上进入项目根目录。
- 安装依赖:
npm install - 构建项目:
npm run build - 使用 PM2 启动服务:
pm2 start npm --name "contract-approval-system" -- run start
-
数据持久化:
- 本应用使用 SQLite 数据库,数据库文件位于
data/database.sqlite。在部署时,请确保此文件及其所在目录具有正确的读写权限,并且在更新部署时不会被意外覆盖。 - 上传的文件存储在
public/uploads目录,也需要注意持久化和备份。
- 本应用使用 SQLite 数据库,数据库文件位于
数据库架构
数据库采用 SQLite,包含以下数据表:
departments - 部门表
存储公司部门信息。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
name |
TEXT | 部门名称, 唯一 |
created_at |
DATETIME | 创建时间 |
users - 用户表
存储系统用户信息。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
username |
TEXT | 用户名, 唯一 |
password |
TEXT | 密码 (bcrypt 加密) |
real_name |
TEXT | 真实姓名 |
role |
TEXT | 角色 (e.g., employee, supervisor, finance, secretary, admin) |
department_id |
INTEGER | 所属部门ID, 外键关联 departments(id) |
status |
INTEGER | 状态 (1: 正常, 0: 禁用) |
created_at |
DATETIME | 创建时间 |
partners - 合作伙伴表
存储合作伙伴公司信息。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
name |
TEXT | 公司全称 |
short_name |
TEXT | 公司简称 |
english_name |
TEXT | 英文名称 |
website |
TEXT | 公司官网 |
logo |
TEXT | Logo 文件路径 |
address |
TEXT | 公司地址 |
description |
TEXT | 公司简介 |
is_deleted |
INTEGER | 是否删除 (0: 未删除, 1: 已删除) |
created_at |
DATETIME | 创建时间 |
contracts - 合同表
存储合同主体信息和审批流转状态。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
project_name |
TEXT | 项目名称 |
partner_id |
INTEGER | 合作伙伴ID, 外键关联 partners(id) |
partner_name |
TEXT | 合作伙伴名称 |
contract_content |
TEXT | 合同内容简介 |
contract_years |
INTEGER | 合同年限 |
contract_amount |
REAL | 合同金额 |
estimated_profit |
REAL | 预估利润 |
payment_type |
TEXT | 收付款类型 (receive/pay) |
sign_date |
TEXT | 签订日期 |
status |
TEXT | 审批状态 (e.g., pending_supervisor, pending_finance, approved) |
creator_id |
INTEGER | 创建人ID, 外键关联 users(id) |
creator_name |
TEXT | 创建人姓名 |
department_id |
INTEGER | 所属部门ID, 外键关联 departments(id) |
department_name |
TEXT | 所属部门名称 |
project_leader |
TEXT | 项目负责人 |
supervisor_opinion |
TEXT | 主管审批意见 |
supervisor_approved |
INTEGER | 主管审批结果 (1: 通过, 0: 驳回) |
supervisor_id |
INTEGER | 主管ID |
supervisor_name |
TEXT | 主管姓名 |
supervisor_time |
DATETIME | 主管审批时间 |
finance_opinion |
TEXT | 财务审批意见 |
finance_approved |
INTEGER | 财务审批结果 |
finance_id |
INTEGER | 财务ID |
finance_name |
TEXT | 财务姓名 |
finance_time |
DATETIME | 财务审批时间 |
secretary_opinion |
TEXT | 秘书审批意见 |
secretary_approved |
INTEGER | 秘书审批结果 |
secretary_id |
INTEGER | 秘书ID |
secretary_name |
TEXT | 秘书姓名 |
secretary_time |
DATETIME | 秘书审批时间 |
reject_reason |
TEXT | 驳回原因 |
created_at |
DATETIME | 创建时间 |
updated_at |
DATETIME | 更新时间 |
contract_attachments - 合同附件表
存储合同的附件文件信息。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
contract_id |
INTEGER | 合同ID, 外键关联 contracts(id) |
file_name |
TEXT | 文件名 |
file_path |
TEXT | 文件存储路径 |
file_size |
INTEGER | 文件大小 (bytes) |
created_at |
DATETIME | 创建时间 |
system_config - 系统配置表
存储系统级别的配置项。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
config_key |
TEXT | 配置键, 唯一 |
config_value |
TEXT | 配置值 |
updated_at |
DATETIME | 更新时间 |
role_permissions - 角色权限表
定义不同角色的菜单可见性。
| 字段名 | 类型 | 描述 |
|---|---|---|
id |
INTEGER | 主键, 自增 |
role |
TEXT | 角色名 |
menu_key |
TEXT | 菜单标识 |
visible |
INTEGER | 是否可见 (1: 可见, 0: 不可见) |
Description
Languages
JavaScript
86.9%
CSS
11.8%
Shell
1%
Dockerfile
0.3%