999 lines
44 KiB
Markdown
999 lines
44 KiB
Markdown
# 公司财务ERP系统 - 项目管理大改造设计方案
|
||||
|
|
|
|||
|
|
> 创建日期:2026-05-14
|
|||
|
|
> 状态:设计方案已完成,待实施
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、改造目标
|
|||
|
|
|
|||
|
|
1. **施工进度与收款彻底分离** —— 两条独立轨道运行
|
|||
|
|
2. **工程类型模板系统** —— 不同类型工程有不同施工阶段,支持串/并联
|
|||
|
|
3. **施工进度推进简单化** —— 阶段确认 → 勾选完成,不绑定业务数据
|
|||
|
|
4. **物资采购全流程** —— 采购申请→审批→订单→物流→现场收货,一条龙
|
|||
|
|
5. **分包商事件评分** —— 事件记录加减分,初始100分
|
|||
|
|
6. **历史数据批量补录** —— Excel导入 + source字段(统一收支表之后做)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、导航结构(改造后)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🏠 工作台
|
|||
|
|
|
|||
|
|
📋 项目管理
|
|||
|
|
├── 项目列表
|
|||
|
|
└── 项目详情(7个Tab)
|
|||
|
|
├── 基本信息
|
|||
|
|
├── 合同与收款
|
|||
|
|
├── 分包管理
|
|||
|
|
├── 材料管理(只读汇总)
|
|||
|
|
├── 财务收支
|
|||
|
|
├── 质保金
|
|||
|
|
└── 施工日志
|
|||
|
|
[进入施工管理 →]
|
|||
|
|
|
|||
|
|
💰 商谈报价
|
|||
|
|
├── 商谈列表
|
|||
|
|
├── 新建商谈
|
|||
|
|
└── 商谈详情
|
|||
|
|
|
|||
|
|
🔨 施工管理(独立模块)
|
|||
|
|
├── 施工总览
|
|||
|
|
├── 施工进度(轻量确认台)
|
|||
|
|
└── 施工日志
|
|||
|
|
|
|||
|
|
📝 财务申请
|
|||
|
|
├── 预支申请
|
|||
|
|
├── 付款申请
|
|||
|
|
├── 报销申请
|
|||
|
|
└── 核销申请
|
|||
|
|
|
|||
|
|
✅ 审批管理
|
|||
|
|
├── 待审批
|
|||
|
|
└── 待执行
|
|||
|
|
|
|||
|
|
📊 财务管理
|
|||
|
|
├── 财务概览
|
|||
|
|
├── 项目收支
|
|||
|
|
├── 汇率管理
|
|||
|
|
└── 预支核销状态
|
|||
|
|
|
|||
|
|
🛒 采购管理
|
|||
|
|
├── 商品管理
|
|||
|
|
├── 采购申请
|
|||
|
|
├── 采购订单
|
|||
|
|
├── 付款计划
|
|||
|
|
└── 库存管理
|
|||
|
|
|
|||
|
|
🤝 合作伙伴
|
|||
|
|
├── 供应商管理
|
|||
|
|
├── 分包商管理
|
|||
|
|
├── 客户管理
|
|||
|
|
└── 物流管理
|
|||
|
|
|
|||
|
|
📈 报表分析
|
|||
|
|
|
|||
|
|
⚙️ 后台管理 /admin
|
|||
|
|
├── 用户管理
|
|||
|
|
├── 角色权限
|
|||
|
|
├── 流程管理
|
|||
|
|
├── 工程模板管理 ← 新增
|
|||
|
|
├── 系统日志
|
|||
|
|
├── 数据备份
|
|||
|
|
└── 关于系统
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、数据库改造
|
|||
|
|
|
|||
|
|
### 3.1 新增表
|
|||
|
|
|
|||
|
|
#### 工程类型模板表
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE project_type_templates (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
name VARCHAR(100) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
phases JSONB NOT NULL DEFAULT '[]',
|
|||
|
|
is_system BOOLEAN DEFAULT false,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 项目施工阶段表
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE project_phases (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
|
|||
|
|
template_key VARCHAR(50),
|
|||
|
|
phase_name VARCHAR(100) NOT NULL,
|
|||
|
|
phase_order INTEGER NOT NULL,
|
|||
|
|
phase_type VARCHAR(20) DEFAULT 'serial', -- 'serial' 串行 / 'parallel' 并行
|
|||
|
|
depends_on INTEGER[], -- 依赖的阶段ID数组
|
|||
|
|
status VARCHAR(20) DEFAULT 'pending', -- pending/in_progress/completed/skipped
|
|||
|
|
started_at TIMESTAMP,
|
|||
|
|
completed_at TIMESTAMP,
|
|||
|
|
completed_by INTEGER REFERENCES users(id),
|
|||
|
|
remark TEXT,
|
|||
|
|
photos TEXT[],
|
|||
|
|
sub_items JSONB DEFAULT '[]', -- 子项列表
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 物流单表(代码已引用但表不存在!)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE logistics_records (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
code VARCHAR(50) UNIQUE NOT NULL,
|
|||
|
|
purchase_order_id INTEGER REFERENCES purchase_orders(id),
|
|||
|
|
ship_from VARCHAR(100) DEFAULT 'China',
|
|||
|
|
logistics_company_id INTEGER REFERENCES logistics_companies(id),
|
|||
|
|
logistics_company VARCHAR(200),
|
|||
|
|
tracking_number VARCHAR(100),
|
|||
|
|
ship_date DATE,
|
|||
|
|
ship_location VARCHAR(200),
|
|||
|
|
estimated_arrival_date DATE, -- 预计送达日期
|
|||
|
|
customs_arrival_date DATE, -- 到海关日期
|
|||
|
|
customs_clearance_date DATE, -- 清关完成日期
|
|||
|
|
use_hub BOOLEAN DEFAULT false, -- 是否需要中转仓
|
|||
|
|
hub_arrival_date DATE, -- 到达中转仓日期
|
|||
|
|
hub_receiver VARCHAR(100),
|
|||
|
|
hub_verified_quantity BOOLEAN DEFAULT false,
|
|||
|
|
second_ship_date DATE, -- 二次运输发车日期
|
|||
|
|
primary_freight NUMERIC(15,2) DEFAULT 0, -- 头程运费(中国→老挝)
|
|||
|
|
primary_freight_currency VARCHAR(10) DEFAULT 'CNY',
|
|||
|
|
primary_freight_status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
primary_freight_document TEXT,
|
|||
|
|
secondary_freight NUMERIC(15,2) DEFAULT 0, -- 二次运费(到现场)
|
|||
|
|
secondary_freight_currency VARCHAR(10) DEFAULT 'LAK',
|
|||
|
|
secondary_freight_status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
driver_phone VARCHAR(50),
|
|||
|
|
cargo_weight NUMERIC(15,2),
|
|||
|
|
transport_distance NUMERIC(15,2),
|
|||
|
|
final_arrival_date DATE, -- 最终到达现场日期
|
|||
|
|
final_location VARCHAR(200), -- 最终收货地点
|
|||
|
|
status VARCHAR(20) DEFAULT 'pending', -- pending/in_transit/at_customs/at_hub/secondary/arrived
|
|||
|
|
remark TEXT,
|
|||
|
|
created_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 现场收货确认表
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE receiving_confirms (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
purchase_order_id INTEGER REFERENCES purchase_orders(id),
|
|||
|
|
logistics_record_id INTEGER REFERENCES logistics_records(id),
|
|||
|
|
confirm_date DATE DEFAULT CURRENT_DATE,
|
|||
|
|
receiver_name VARCHAR(100), -- 收货人
|
|||
|
|
receiver_phone VARCHAR(50),
|
|||
|
|
received_location VARCHAR(200), -- 收货地点
|
|||
|
|
is_complete BOOLEAN DEFAULT true, -- 是否全部到齐
|
|||
|
|
missing_items TEXT, -- 缺失项描述
|
|||
|
|
damage_items TEXT, -- 损坏项描述
|
|||
|
|
photo_urls TEXT[], -- 收货照片
|
|||
|
|
remark TEXT,
|
|||
|
|
confirmed_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 分包商事件记录表
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE subcontractor_events (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
subcontractor_id INTEGER REFERENCES subcontractors(id),
|
|||
|
|
project_id INTEGER REFERENCES projects(id),
|
|||
|
|
event_type VARCHAR(10) NOT NULL, -- 'positive' / 'negative'
|
|||
|
|
score_change INTEGER NOT NULL, -- 1~10 或 -10~-1
|
|||
|
|
event_date DATE NOT NULL,
|
|||
|
|
title VARCHAR(200) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
created_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 修改现有表
|
|||
|
|
|
|||
|
|
#### projects 表增加字段
|
|||
|
|
```sql
|
|||
|
|
ALTER TABLE projects ADD COLUMN type_template_id INTEGER;
|
|||
|
|
ALTER TABLE projects ADD COLUMN current_phase VARCHAR(50);
|
|||
|
|
ALTER TABLE projects ADD COLUMN phase_progress NUMERIC(5,2) DEFAULT 0;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### purchase_orders 表增加字段
|
|||
|
|
```sql
|
|||
|
|
ALTER TABLE purchase_orders ADD COLUMN expected_delivery_date DATE;
|
|||
|
|
ALTER TABLE purchase_orders ADD COLUMN receiving_status VARCHAR(20) DEFAULT 'pending';
|
|||
|
|
-- receiving_status: pending/partial_received/received/verified
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### subcontractors 表增加字段
|
|||
|
|
```sql
|
|||
|
|
ALTER TABLE subcontractors ADD COLUMN score INTEGER DEFAULT 100;
|
|||
|
|
ALTER TABLE subcontractors ADD COLUMN initial_score INTEGER DEFAULT 100;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、物资采购完整流程
|
|||
|
|
|
|||
|
|
### 4.1 流程图
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
采购申请(选择项目、供应商、商品明细)
|
|||
|
|
│
|
|||
|
|
↓ 提交审批
|
|||
|
|
│
|
|||
|
|
审批管理 → 审批通过
|
|||
|
|
│
|
|||
|
|
↓ 生成采购订单
|
|||
|
|
│
|
|||
|
|
采购订单(确认商品、数量、价格)
|
|||
|
|
│
|
|||
|
|
↓ 创建物流单
|
|||
|
|
│
|
|||
|
|
物流单(选择物流公司、预计送达日期)
|
|||
|
|
├─ 头程运输:中国仓库 → 老挝海关 → 中转仓
|
|||
|
|
│ 填写:发货日期、预计到海关日期、清关日期
|
|||
|
|
│ 填写:头程运费
|
|||
|
|
│
|
|||
|
|
├─ 中转仓(可选)
|
|||
|
|
│ 填写:到达中转仓日期、验货数量
|
|||
|
|
│
|
|||
|
|
├─ 二次运输:中转仓 → 项目现场
|
|||
|
|
│ 填写:发车日期、司机电话、运费
|
|||
|
|
│ 填写:预计到达现场日期
|
|||
|
|
│
|
|||
|
|
└─ 现场收货确认
|
|||
|
|
拍照、检查数量质量、确认到齐/缺失/损坏
|
|||
|
|
│
|
|||
|
|
↓ 确认收货
|
|||
|
|
│
|
|||
|
|
库存记录更新(入库 → 项目库存)
|
|||
|
|
│
|
|||
|
|
↓
|
|||
|
|
项目详情 → 材料管理Tab(自动汇总显示)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.2 页面结构
|
|||
|
|
|
|||
|
|
#### 采购订单详情页(多Tab布局)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 采购订单详情 PO202605140001 状态:已确认 │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ [基本信息] [商品明细] [物流信息] [验收记录] [付款计划] │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─ 基本信息 ───────────────────────────────────────┐ │
|
|||
|
|
│ │ 订单编号:PO202605140001 │ │
|
|||
|
|
│ │ 所属项目:老挝川圹22kV项目 │ │
|
|||
|
|
│ │ 供应商: XX电气设备公司 │ │
|
|||
|
|
│ │ 预计送达:[2025-03-15 ] │ │
|
|||
|
|
│ │ 收货状态:⏳待收货 │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [确认订单] [取消订单] │ │
|
|||
|
|
│ └────────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─ 物流信息 ───────────────────────────────────────┐ │
|
|||
|
|
│ │ 物流单号:LR202605140001 │ │
|
|||
|
|
│ │ 物流公司:[XX国际物流 ▼] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 头程运输(中国→老挝): │ │
|
|||
|
|
│ │ 发货地: [云南昆明 ] │ │
|
|||
|
|
│ │ 发货日期:[2025-02-20 ] │ │
|
|||
|
|
│ │ 预计到海关:[2025-02-25 ] │ │
|
|||
|
|
│ │ 清关日期:[2025-03-01 ] │ │
|
|||
|
|
│ │ 头程运费:[8,000] CNY │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ ☐ 需要中转仓 │ │
|
|||
|
|
│ │ 到达中转仓:[2025-03-02 ] │ │
|
|||
|
|
│ │ 中转仓验货:[数量无误 ☑] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 二次运输(中转仓→现场): │ │
|
|||
|
|
│ │ 发车日期:[2025-03-03 ] │ │
|
|||
|
|
│ │ 司机电话:[020 12345678 ] │ │
|
|||
|
|
│ │ 二次运费:[1,500,000] LAK │ │
|
|||
|
|
│ │ 预计到达现场:[2025-03-05] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [更新物流信息] │ │
|
|||
|
|
│ └────────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─ 验收记录(现场收货确认)────────────────────────┐ │
|
|||
|
|
│ │ 收货日期:[2025-03-05 ] │ │
|
|||
|
|
│ │ 收货人: [张三 ] │ │
|
|||
|
|
│ │ 收货地点:[川圹省项目现场 ] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 收货状态:● 全部到齐 ○ 部分到齐 ○ 未到货 │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 缺失项:(选填) │ │
|
|||
|
|
│ │ ┌─────────────────────────────────────────────┐ │ │
|
|||
|
|
│ │ │ 缺少绝缘子50个 │ │ │
|
|||
|
|
│ │ └─────────────────────────────────────────────┘ │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 损坏项:(选填) │ │
|
|||
|
|
│ │ ┌─────────────────────────────────────────────┐ │ │
|
|||
|
|
│ │ │ 无 │ │ │
|
|||
|
|
│ │ └─────────────────────────────────────────────┘ │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 📷 收货照片: │ │
|
|||
|
|
│ │ [📷] [📷] [+上传] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [确认收货] │ │
|
|||
|
|
│ └────────────────────────────────────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、核心页面设计
|
|||
|
|
|
|||
|
|
### 5.1 项目详情页(7个Tab)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ ← 返回 老挝川圹22kV配电项目 ████████░░ 62% │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ [基本信息] [合同与收款] [分包管理] [材料管理] │
|
|||
|
|
│ [财务收支] [质保金] [施工日志] │
|
|||
|
|
│ │
|
|||
|
|
│ 📍 施工进度:设备安装中(4/7阶段) │
|
|||
|
|
│ [进入施工管理 →] │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ (Tab内容) │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Tab1 基本信息**:项目基础字段编辑(不变)
|
|||
|
|
|
|||
|
|
**Tab2 合同与收款**:
|
|||
|
|
- 合同基本信息(合同金额、结算方式、工期、质保金)
|
|||
|
|
- 甲方收款计划(独立于施工进度)
|
|||
|
|
- [编辑合同] [添加收款节点] [标记已收款]
|
|||
|
|
|
|||
|
|
**Tab3 分包管理**:
|
|||
|
|
- 分包合同列表(分包商、金额、已付款、待付款、状态、分数)
|
|||
|
|
- 点击查看详情 ↓
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─ 分包详情:李工班组 ────────────────────────────────┐
|
|||
|
|
│ [合同信息] [付款记录] [事件记录] │
|
|||
|
|
│ │
|
|||
|
|
│ 综合评分:96分 ████████████░░░░ 初始分:100 │
|
|||
|
|
│ │
|
|||
|
|
│ 事件记录: │
|
|||
|
|
│ ┌────┬──────┬──────┬─────┬─────────────────┐ │
|
|||
|
|
│ │日期│类型 │分数 │累计 │事件 │ │
|
|||
|
|
│ ├────┼──────┼──────┼─────┼─────────────────┤ │
|
|||
|
|
│ │03-01│⚠️扣分│ -3 │ 97 │电杆基础垂直度不够│ │
|
|||
|
|
│ │02-15│✅加分│ +5 │100 │提前完成土建 │ │
|
|||
|
|
│ │01-20│⚠️扣分│ -5 │ 95 │工人到场迟到3天 │ │
|
|||
|
|
│ │01-01│初始 │起始分│100 │初始分数 │ │
|
|||
|
|
│ └────┴──────┴──────┴─────┴─────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [+ 添加事件] │
|
|||
|
|
└──────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Tab4 材料管理**(只读汇总,数据来自采购管理系统):
|
|||
|
|
```
|
|||
|
|
┌─ 材料管理 ───────────────────────────────────────────┐
|
|||
|
|
│ [订购汇总] [使用汇总] [退库汇总] │
|
|||
|
|
│ │
|
|||
|
|
│ 数据来自:采购管理→采购订单→物流→收货确认 │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────┬────┬──────┬──────┬────────┬────────┐ │
|
|||
|
|
│ │材料 │单位│订购量│已到货│供应商 │状态 │ │
|
|||
|
|
│ ├──────┼────┼──────┼──────┼────────┼────────┤ │
|
|||
|
|
│ │电杆 │根 │ 50 │ 50 │XX供应商│✅到齐 │ │
|
|||
|
|
│ │变压器│台 │ 2 │ 2 │YY供应商│✅到齐 │ │
|
|||
|
|
│ │电缆 │米 │ 3000 │ 2500 │ZZ供应商│⏳部分 │ │
|
|||
|
|
│ └──────┴────┴──────┴──────┴────────┴────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [去采购管理 →] │
|
|||
|
|
└───────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Tab5 财务收支**(收支汇总视图):
|
|||
|
|
- 合同金额、甲方回款、总支出、毛利
|
|||
|
|
- 材料费/人工费/机械费/其他支出 饼图
|
|||
|
|
- 收支明细列表
|
|||
|
|
|
|||
|
|
**Tab6 质保金**(不变)
|
|||
|
|
**Tab7 施工日志**(不变)
|
|||
|
|
|
|||
|
|
### 5.2 施工管理 → 施工进度页(手机友好)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────┐
|
|||
|
|
│ ← 返回 施工进度 │
|
|||
|
|
│ │
|
|||
|
|
│ 老挝川圹22kV配电项目 │
|
|||
|
|
│ ██████████░░░░░░ 62% │
|
|||
|
|
│ │
|
|||
|
|
│ ①勘察 ②物资 ③土建 ④安装│
|
|||
|
|
│ ✅ ✅ ✅ 🔵 │
|
|||
|
|
│ │
|
|||
|
|
│ 📍 当前:④ 设备安装 │
|
|||
|
|
│ ┌───────────────────────┐ │
|
|||
|
|
│ │ ☑ 变压器就位固定 │ │
|
|||
|
|
│ │ ☐ 配电柜安装接线 │ │
|
|||
|
|
│ │ ☐ 母线桥架安装 │ │
|
|||
|
|
│ │ ☐ 接地系统完成 │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ 备注:[ ]│ │
|
|||
|
|
│ │ 📷 [拍照] │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ [✅ 确认完成此阶段] │ │
|
|||
|
|
│ └───────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 阶段历史: │
|
|||
|
|
│ ✅ ③土建基础 02-10完成 │
|
|||
|
|
│ ✅ ②物资采购 01-28完成 │
|
|||
|
|
│ ✅ ①勘察设计 01-15完成 │
|
|||
|
|
└──────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.3 施工总览页
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 施工总览 2025年2月 │
|
|||
|
|
│ │
|
|||
|
|
│ 施工中:3个 | ⚠️ 延期风险:1个 │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 🔵 老挝川圹22kV 设备安装(4/7) ██████░░ 57% │ │
|
|||
|
|
│ │ 收款:150K/500K(30%) [进入] │ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ 🔵 万象10kV线路 架线施工(5/7) ████████░░ 71% │ │
|
|||
|
|
│ │ 收款:80K/300K(27%) ⚠️延期 [进入] │ │
|
|||
|
|
│ ├──────────────────────────────────────────────────┤ │
|
|||
|
|
│ │ 🟢 琅勃拉邦户表 安装施工(3/5) ██████░░░░ 60% │ │
|
|||
|
|
│ │ 收款:50K/100K(50%) [进入] │ │
|
|||
|
|
│ └──────────────────────────────────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、工程模板设计器(后台管理)
|
|||
|
|
|
|||
|
|
### 6.1 页面路径
|
|||
|
|
|
|||
|
|
`/admin/process-templates`
|
|||
|
|
|
|||
|
|
### 6.2 模板列表页
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 后台管理 / 工程模板管理 │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 系统预设模板(不可删除,可复制) │
|
|||
|
|
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
|
|||
|
|
│ │配电安装│ │架空线路│ │电缆敷设│ │变电站 │ │小型工程│ │
|
|||
|
|
│ │7阶段 │ │7阶段 │ │7阶段 │ │8阶段 │ │5阶段 │ │
|
|||
|
|
│ │[查看] │ │[查看]│ │[查看]│ │[查看]│ │[查看]│ │
|
|||
|
|
│ │[复制] │ │[复制]│ │[复制]│ │[复制]│ │[复制]│ │
|
|||
|
|
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 自定义模板 │
|
|||
|
|
│ ┌─────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 📋 老挝配电+线路混合 6阶段 [编辑] [删除] │ │
|
|||
|
|
│ └─────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ [+ 新建模板] │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.3 新建/编辑模板
|
|||
|
|
|
|||
|
|
**第1步:基本信息**
|
|||
|
|
```
|
|||
|
|
模板名称:[ ]
|
|||
|
|
模板描述:[ ]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**第2步:设计阶段**
|
|||
|
|
```
|
|||
|
|
┌─ 阶段列表 ───────────────────────────────────────────────┐
|
|||
|
|
│ │
|
|||
|
|
│ ① 勘察设计 串行 依赖:无 子项:勘察、设计、方案确认 │
|
|||
|
|
│ [编辑] [↑] [↓] [删除] │
|
|||
|
|
│ ──────────────────────────────────────────────────────── │
|
|||
|
|
│ ② 物资采购 并行 依赖:① 子项:电杆、变压器、电缆... │
|
|||
|
|
│ [编辑] [↑] [↓] [删除] │
|
|||
|
|
│ ──────────────────────────────────────────────────────── │
|
|||
|
|
│ ③ 土建基础 串行 依赖:① 子项:开挖、浇筑、接地 │
|
|||
|
|
│ [编辑] [↑] [↓] [删除] │
|
|||
|
|
│ │
|
|||
|
|
│ [+ 添加阶段] │
|
|||
|
|
└───────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**点击[编辑]弹出抽屉:**
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────────┐
|
|||
|
|
│ 编辑阶段 [×] │
|
|||
|
|
│ │
|
|||
|
|
│ 阶段名称:[物资采购 ] │
|
|||
|
|
│ 阶段类型:○ 串行 ● 并行 │
|
|||
|
|
│ │
|
|||
|
|
│ 依赖关系: │
|
|||
|
|
│ ┌───────────────────────────┐ │
|
|||
|
|
│ │ ☑ ①勘察设计 │ │
|
|||
|
|
│ │ ☐ ③土建基础 │ │
|
|||
|
|
│ └───────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ 子项列表: │
|
|||
|
|
│ 1. 电杆采购 [×删除] │
|
|||
|
|
│ 2. 变压器采购 [×删除] │
|
|||
|
|
│ 3. 电缆采购 [×删除] │
|
|||
|
|
│ [+ 添加子项] │
|
|||
|
|
│ │
|
|||
|
|
│ [取消] [保存] │
|
|||
|
|
└──────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**第3步:预览确认**
|
|||
|
|
```
|
|||
|
|
阶段流程图预览:
|
|||
|
|
|
|||
|
|
①勘察设计 ──┬──→ ③土建基础 ──→ ④设备安装 ──→ ...
|
|||
|
|
(串行) │ (串行)
|
|||
|
|
└──→ ②物资采购 ──────────────────┘
|
|||
|
|
(并行)
|
|||
|
|
├ 电杆采购
|
|||
|
|
├ 变压器采购
|
|||
|
|
├ 电缆采购
|
|||
|
|
└ 金具绝缘子采购
|
|||
|
|
|
|||
|
|
[确认创建模板]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、创建项目流程改造
|
|||
|
|
|
|||
|
|
### 7.1 从商谈签约导入
|
|||
|
|
```
|
|||
|
|
商谈项目 → 签约 → 弹出签约窗口
|
|||
|
|
→ 合同信息(不变)
|
|||
|
|
→ 新增:选择工程类型模板 [配电安装 ▼]
|
|||
|
|
→ 确认签约
|
|||
|
|
→ 自动创建 projects 记录
|
|||
|
|
→ 自动从模板复制阶段到 project_phases
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.2 手动新建项目
|
|||
|
|
```
|
|||
|
|
项目管理 → 新建项目
|
|||
|
|
→ 步骤1:选择工程类型模板
|
|||
|
|
[配电安装] [架空线路] [电缆敷设] [变电站] [小型工程] [自定义]
|
|||
|
|
→ 步骤2:填写基本信息
|
|||
|
|
→ 创建 → 自动从模板复制阶段
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、预算报价导入项目的处理
|
|||
|
|
|
|||
|
|
**保留原有流程**,增强:
|
|||
|
|
|
|||
|
|
在 budget.js 的 PUT /:id/sign 接口中:
|
|||
|
|
1. 签约时要求传入 `type_template_id` 参数
|
|||
|
|
2. 签约成功创建 projects 后,自动从模板复制阶段到 project_phases
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 九、数据补录方案(后续实施)
|
|||
|
|
|
|||
|
|
1. 先完成系统改造,统一收支表结构
|
|||
|
|
2. 增加 `source` 字段标记数据来源(normal/import/summary)
|
|||
|
|
3. 设计 Excel 模板批量导入
|
|||
|
|
4. 报表按分类汇总,不论来源
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十、预设模板数据
|
|||
|
|
|
|||
|
|
### 模板1:配电安装工程
|
|||
|
|
```
|
|||
|
|
① 勘察设计(串行)- 无依赖
|
|||
|
|
② 物资采购(并行)- 依赖① - 子项:电杆、变压器、配电柜、电缆、金具、绝缘子
|
|||
|
|
③ 土建基础(串行)- 依赖① - 子项:基础开挖、基础浇筑、接地施工
|
|||
|
|
④ 设备安装(串行)- 依赖②③ - 子项:变压器安装、配电柜安装、母线安装
|
|||
|
|
⑤ 调试试验(串行)- 依赖④ - 子项:绝缘试验、耐压试验、保护调试
|
|||
|
|
⑥ 竣工验收(串行)- 依赖⑤
|
|||
|
|
⑦ 送电投运(串行)- 依赖⑥
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模板2:架空线路工程
|
|||
|
|
```
|
|||
|
|
① 勘察设计(串行)- 无依赖
|
|||
|
|
② 物资采购(并行)- 依赖① - 子项:电杆、导线、金具、绝缘子、避雷器
|
|||
|
|
③ 基础施工(串行)- 依赖① - 子项:杆坑开挖、拉线坑开挖、基础浇筑
|
|||
|
|
④ 杆塔组立(串行)- 依赖②③ - 子项:电杆组立、拉线安装
|
|||
|
|
⑤ 架线施工(串行)- 依赖④ - 子项:放线、紧线、附件安装
|
|||
|
|
⑥ 竣工验收(串行)- 依赖⑤
|
|||
|
|
⑦ 送电投运(串行)- 依赖⑥
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模板3:电缆敷设工程
|
|||
|
|
```
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模板4:变电站工程
|
|||
|
|
```
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模板5:小型工程
|
|||
|
|
```
|
|||
|
|
① 勘察设计(串行)
|
|||
|
|
② 物资采购(并行)- 依赖①
|
|||
|
|
③ 安装施工(串行)- 依赖②
|
|||
|
|
④ 调试验收(串行)- 依赖③
|
|||
|
|
⑤ 并网投运(串行)- 依赖④
|
|||
|
|
```
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十一、实施步骤
|
|||
|
|
|
|||
|
|
### 步骤1:创建缺失数据库表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 1. 物流单表(代码已引用,表未创建)
|
|||
|
|
CREATE TABLE logistics_records (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
code VARCHAR(50) UNIQUE NOT NULL,
|
|||
|
|
purchase_order_id INTEGER REFERENCES purchase_orders(id),
|
|||
|
|
ship_from VARCHAR(100) DEFAULT 'China',
|
|||
|
|
logistics_company_id INTEGER REFERENCES logistics_companies(id),
|
|||
|
|
logistics_company VARCHAR(200),
|
|||
|
|
tracking_number VARCHAR(100),
|
|||
|
|
ship_date DATE,
|
|||
|
|
ship_location VARCHAR(200),
|
|||
|
|
estimated_arrival_date DATE,
|
|||
|
|
customs_arrival_date DATE,
|
|||
|
|
customs_clearance_date DATE,
|
|||
|
|
use_hub BOOLEAN DEFAULT false,
|
|||
|
|
hub_arrival_date DATE,
|
|||
|
|
hub_receiver VARCHAR(100),
|
|||
|
|
hub_verified_quantity BOOLEAN DEFAULT false,
|
|||
|
|
second_ship_date DATE,
|
|||
|
|
primary_freight NUMERIC(15,2) DEFAULT 0,
|
|||
|
|
primary_freight_currency VARCHAR(10) DEFAULT 'CNY',
|
|||
|
|
primary_freight_status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
primary_freight_document TEXT,
|
|||
|
|
secondary_freight NUMERIC(15,2) DEFAULT 0,
|
|||
|
|
secondary_freight_currency VARCHAR(10) DEFAULT 'LAK',
|
|||
|
|
secondary_freight_status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
driver_phone VARCHAR(50),
|
|||
|
|
cargo_weight NUMERIC(15,2),
|
|||
|
|
transport_distance NUMERIC(15,2),
|
|||
|
|
final_arrival_date DATE,
|
|||
|
|
final_location VARCHAR(200),
|
|||
|
|
status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
remark TEXT,
|
|||
|
|
created_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 2. 现场收货确认表
|
|||
|
|
CREATE TABLE receiving_confirms (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
purchase_order_id INTEGER REFERENCES purchase_orders(id),
|
|||
|
|
logistics_record_id INTEGER REFERENCES logistics_records(id),
|
|||
|
|
confirm_date DATE DEFAULT CURRENT_DATE,
|
|||
|
|
receiver_name VARCHAR(100),
|
|||
|
|
receiver_phone VARCHAR(50),
|
|||
|
|
received_location VARCHAR(200),
|
|||
|
|
is_complete BOOLEAN DEFAULT true,
|
|||
|
|
missing_items TEXT,
|
|||
|
|
damage_items TEXT,
|
|||
|
|
photo_urls TEXT[],
|
|||
|
|
remark TEXT,
|
|||
|
|
confirmed_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 3. 工程类型模板表
|
|||
|
|
CREATE TABLE project_type_templates (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
name VARCHAR(100) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
phases JSONB NOT NULL DEFAULT '[]',
|
|||
|
|
is_system BOOLEAN DEFAULT false,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|||
|
|
updated_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 4. 项目施工阶段表
|
|||
|
|
CREATE TABLE project_phases (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
|
|||
|
|
template_key VARCHAR(50),
|
|||
|
|
phase_name VARCHAR(100) NOT NULL,
|
|||
|
|
phase_order INTEGER NOT NULL,
|
|||
|
|
phase_type VARCHAR(20) DEFAULT 'serial',
|
|||
|
|
depends_on INTEGER[],
|
|||
|
|
status VARCHAR(20) DEFAULT 'pending',
|
|||
|
|
started_at TIMESTAMP,
|
|||
|
|
completed_at TIMESTAMP,
|
|||
|
|
completed_by INTEGER REFERENCES users(id),
|
|||
|
|
remark TEXT,
|
|||
|
|
photos TEXT[],
|
|||
|
|
sub_items JSONB DEFAULT '[]',
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 5. 分包商事件记录表
|
|||
|
|
CREATE TABLE subcontractor_events (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
subcontractor_id INTEGER REFERENCES subcontractors(id),
|
|||
|
|
project_id INTEGER REFERENCES projects(id),
|
|||
|
|
event_type VARCHAR(10) NOT NULL,
|
|||
|
|
score_change INTEGER NOT NULL,
|
|||
|
|
event_date DATE NOT NULL,
|
|||
|
|
title VARCHAR(200) NOT NULL,
|
|||
|
|
description TEXT,
|
|||
|
|
created_by INTEGER REFERENCES users(id),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤2:修改现有表
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- projects 增加字段
|
|||
|
|
ALTER TABLE projects ADD COLUMN IF NOT EXISTS type_template_id INTEGER;
|
|||
|
|
ALTER TABLE projects ADD COLUMN IF NOT EXISTS current_phase VARCHAR(50);
|
|||
|
|
ALTER TABLE projects ADD COLUMN IF NOT EXISTS phase_progress NUMERIC(5,2) DEFAULT 0;
|
|||
|
|
|
|||
|
|
-- purchase_orders 增加字段
|
|||
|
|
ALTER TABLE purchase_orders ADD COLUMN IF NOT EXISTS expected_delivery_date DATE;
|
|||
|
|
ALTER TABLE purchase_orders ADD COLUMN IF NOT EXISTS receiving_status VARCHAR(20) DEFAULT 'pending';
|
|||
|
|
|
|||
|
|
-- subcontractors 增加字段
|
|||
|
|
ALTER TABLE subcontractors ADD COLUMN IF NOT EXISTS score INTEGER DEFAULT 100;
|
|||
|
|
ALTER TABLE subcontractors ADD COLUMN IF NOT EXISTS initial_score INTEGER DEFAULT 100;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤3:插入预设模板数据
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
INSERT INTO project_type_templates (name, description, phases, is_system) VALUES
|
|||
|
|
('配电安装工程', '配电安装项目的标准阶段划分', '[
|
|||
|
|
{"order":1,"name":"勘察设计","type":"serial","depends":[],"sub_items":["现场勘察","图纸设计","方案确认"]},
|
|||
|
|
{"order":2,"name":"物资采购","type":"parallel","depends":[1],"sub_items":["电杆采购","变压器采购","配电柜采购","电缆采购","金具采购","绝缘子采购"]},
|
|||
|
|
{"order":3,"name":"土建基础","type":"serial","depends":[1],"sub_items":["基础开挖","基础浇筑","接地施工"]},
|
|||
|
|
{"order":4,"name":"设备安装","type":"serial","depends":[2,3],"sub_items":["变压器安装","配电柜安装","母线安装"]},
|
|||
|
|
{"order":5,"name":"调试试验","type":"serial","depends":[4],"sub_items":["绝缘试验","耐压试验","保护调试"]},
|
|||
|
|
{"order":6,"name":"竣工验收","type":"serial","depends":[5],"sub_items":[]},
|
|||
|
|
{"order":7,"name":"送电投运","type":"serial","depends":[6],"sub_items":[]}
|
|||
|
|
]', true),
|
|||
|
|
('架空线路工程', '架空线路项目的标准阶段划分', '[
|
|||
|
|
{"order":1,"name":"勘察设计","type":"serial","depends":[],"sub_items":["线路勘察","图纸设计"]},
|
|||
|
|
{"order":2,"name":"物资采购","type":"parallel","depends":[1],"sub_items":["电杆采购","导线采购","金具采购","绝缘子采购","避雷器采购"]},
|
|||
|
|
{"order":3,"name":"基础施工","type":"serial","depends":[1],"sub_items":["杆坑开挖","拉线坑开挖","基础浇筑"]},
|
|||
|
|
{"order":4,"name":"杆塔组立","type":"serial","depends":[2,3],"sub_items":["电杆组立","拉线安装"]},
|
|||
|
|
{"order":5,"name":"架线施工","type":"serial","depends":[4],"sub_items":["放线","紧线","附件安装"]},
|
|||
|
|
{"order":6,"name":"竣工验收","type":"serial","depends":[5],"sub_items":[]},
|
|||
|
|
{"order":7,"name":"送电投运","type":"serial","depends":[6],"sub_items":[]}
|
|||
|
|
]', true),
|
|||
|
|
('电缆敷设工程', '电缆敷设项目的标准阶段划分', '[
|
|||
|
|
{"order":1,"name":"勘察设计","type":"serial","depends":[],"sub_items":["现场勘察","图纸设计"]},
|
|||
|
|
{"order":2,"name":"物资采购","type":"parallel","depends":[1],"sub_items":["电缆采购","接头附件采购","管材采购"]},
|
|||
|
|
{"order":3,"name":"电缆沟开挖","type":"serial","depends":[1],"sub_items":["沟道开挖","排管敷设"]},
|
|||
|
|
{"order":4,"name":"电缆敷设","type":"serial","depends":[2,3],"sub_items":["电缆敷设","电缆固定"]},
|
|||
|
|
{"order":5,"name":"接头制作","type":"serial","depends":[4],"sub_items":["中间接头","终端接头"]},
|
|||
|
|
{"order":6,"name":"试验验收","type":"serial","depends":[5],"sub_items":["绝缘试验","耐压试验"]},
|
|||
|
|
{"order":7,"name":"送电投运","type":"serial","depends":[6],"sub_items":[]}
|
|||
|
|
]', true),
|
|||
|
|
('变电站工程', '变电站项目的标准阶段划分', '[
|
|||
|
|
{"order":1,"name":"勘察设计","type":"serial","depends":[],"sub_items":["现场勘察","初步设计","施工图设计"]},
|
|||
|
|
{"order":2,"name":"物资采购","type":"parallel","depends":[1],"sub_items":["主变压器采购","开关柜采购","保护装置采购","电缆采购"]},
|
|||
|
|
{"order":3,"name":"土建施工","type":"serial","depends":[1],"sub_items":["场地平整","基础施工","建筑物施工"]},
|
|||
|
|
{"order":4,"name":"一次设备安装","type":"serial","depends":[2,3],"sub_items":["变压器安装","开关柜安装","母线安装"]},
|
|||
|
|
{"order":5,"name":"二次设备安装","type":"serial","depends":[4],"sub_items":["保护屏安装","控制电缆敷设","直流系统安装"]},
|
|||
|
|
{"order":6,"name":"调试试验","type":"serial","depends":[5],"sub_items":["单体调试","系统联调","保护试验"]},
|
|||
|
|
{"order":7,"name":"竣工验收","type":"serial","depends":[6],"sub_items":[]},
|
|||
|
|
{"order":8,"name":"送电投运","type":"serial","depends":[7],"sub_items":[]}
|
|||
|
|
]', true),
|
|||
|
|
('小型工程(光伏/充电桩/户表等)', '小型项目的标准阶段划分', '[
|
|||
|
|
{"order":1,"name":"勘察设计","type":"serial","depends":[],"sub_items":["现场勘察","方案设计"]},
|
|||
|
|
{"order":2,"name":"物资采购","type":"parallel","depends":[1],"sub_items":["设备采购","材料采购"]},
|
|||
|
|
{"order":3,"name":"安装施工","type":"serial","depends":[2],"sub_items":["设备安装","线路连接"]},
|
|||
|
|
{"order":4,"name":"调试验收","type":"serial","depends":[3],"sub_items":["系统调试","验收检查"]},
|
|||
|
|
{"order":5,"name":"并网投运","type":"serial","depends":[4],"sub_items":[]}
|
|||
|
|
]', true);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤4:后端 —— 工程模板管理接口
|
|||
|
|
|
|||
|
|
创建 `/backend/routes/process-templates.js`:
|
|||
|
|
- `GET /api/process-templates` - 获取所有模板列表
|
|||
|
|
- `GET /api/process-templates/:id` - 获取模板详情
|
|||
|
|
- `POST /api/process-templates` - 创建自定义模板
|
|||
|
|
- `PUT /api/process-templates/:id` - 更新自定义模板
|
|||
|
|
- `DELETE /api/process-templates/:id` - 删除自定义模板(系统模板不可删)
|
|||
|
|
- `POST /api/process-templates/:id/copy` - 复制模板(包括系统模板)
|
|||
|
|
|
|||
|
|
在 `app.js` 注册路由:
|
|||
|
|
```javascript
|
|||
|
|
app.use('/api/process-templates', require('./routes/process-templates'));
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤5:后端 —— 项目阶段管理接口
|
|||
|
|
|
|||
|
|
修改 `/backend/routes/projects.js`,新增阶段相关接口:
|
|||
|
|
- `GET /api/projects/:id/phases` - 获取项目的所有阶段
|
|||
|
|
- `PUT /api/projects/:id/phases/:phaseId/complete` - 完成某个阶段
|
|||
|
|
- `PUT /api/projects/:id/phases/:phaseId/reopen` - 重新打开某个阶段
|
|||
|
|
- `PUT /api/projects/:id/phases/:phaseId/sub-item` - 更新子项状态
|
|||
|
|
|
|||
|
|
阶段完成时自动:
|
|||
|
|
- 更新 `project_phases.status = 'completed'`
|
|||
|
|
- 更新 `projects.current_phase` 为下一阶段
|
|||
|
|
- 重新计算 `projects.phase_progress`
|
|||
|
|
|
|||
|
|
### 步骤6:后端 —— 物流管理接口
|
|||
|
|
|
|||
|
|
已存在 `/backend/routes/logistics.js`,但表 `logistics_records` 未创建。
|
|||
|
|
- ✅ 步骤1中已创建表 → 直接可用
|
|||
|
|
|
|||
|
|
### 步骤7:后端 —— 收货确认接口
|
|||
|
|
|
|||
|
|
创建 `/backend/routes/receiving.js`:
|
|||
|
|
- `POST /api/receiving` - 创建收货确认
|
|||
|
|
- `GET /api/receiving/:purchase_order_id` - 获取订单的收货记录
|
|||
|
|
- `PUT /api/receiving/:id` - 更新收货信息
|
|||
|
|
|
|||
|
|
收货确认时自动:
|
|||
|
|
- 更新 `purchase_orders.receiving_status`
|
|||
|
|
- 更新 `inventory_records`(库存入库)
|
|||
|
|
|
|||
|
|
### 步骤8:后端 —— 分包商事件接口
|
|||
|
|
|
|||
|
|
修改 `/backend/routes/subcontractors.js`,新增:
|
|||
|
|
- `GET /api/subcontractors/:id/events` - 获取分包商事件列表
|
|||
|
|
- `POST /api/subcontractors/:id/events` - 添加事件
|
|||
|
|
- `DELETE /api/subcontractors/:id/events/:eventId` - 删除事件
|
|||
|
|
|
|||
|
|
添加/删除事件时自动更新 `subcontractors.score`。
|
|||
|
|
|
|||
|
|
### 步骤9:后端 —— 修改预算签约接口
|
|||
|
|
|
|||
|
|
修改 `/backend/routes/budget.js` 的 PUT /:id/sign:
|
|||
|
|
- 接收 `type_template_id` 参数
|
|||
|
|
- 创建 projects 后,自动从模板复制阶段到 project_phases
|
|||
|
|
|
|||
|
|
### 步骤10:后端 —— 修改项目创建接口
|
|||
|
|
|
|||
|
|
修改 `/backend/routes/projects.js` 的 POST /:
|
|||
|
|
- 接收 `type_template_id` 参数
|
|||
|
|
- 创建项目后,自动从模板复制阶段到 project_phases
|
|||
|
|
|
|||
|
|
### 步骤11:前端 —— 后台管理 → 工程模板设计器
|
|||
|
|
|
|||
|
|
新建文件:
|
|||
|
|
- `/frontend/src/pages/admin/ProcessTemplates.tsx` - 模板列表页
|
|||
|
|
- `/frontend/src/pages/admin/ProcessTemplateForm.tsx` - 模板新建/编辑页(三步向导)
|
|||
|
|
|
|||
|
|
在 AdminLayout 增加菜单项和路由。
|
|||
|
|
|
|||
|
|
### 步骤12:前端 —— 项目详情页重构
|
|||
|
|
|
|||
|
|
修改 `ProjectDetail.tsx`:
|
|||
|
|
- 重新组织为7个Tab(基本信息、合同与收款、分包管理、材料管理、财务收支、质保金、施工日志)
|
|||
|
|
- Tab2 合同与收款:独立管理收款节点,与施工进度解耦
|
|||
|
|
- Tab3 分包管理:增加事件记录和评分显示
|
|||
|
|
- Tab4 材料管理:改为只读汇总,数据来自采购系统
|
|||
|
|
- 顶部增加施工进度预览条 + "进入施工管理"按钮
|
|||
|
|
|
|||
|
|
### 步骤13:前端 —— 施工总览页(新建)
|
|||
|
|
|
|||
|
|
新建文件:
|
|||
|
|
- `/frontend/src/pages/construction/ConstructionOverview.tsx`
|
|||
|
|
|
|||
|
|
功能:
|
|||
|
|
- 显示所有"进行中"项目的施工进度条
|
|||
|
|
- 当前阶段、收款比例
|
|||
|
|
- 延期预警
|
|||
|
|
- 点击进入施工进度页
|
|||
|
|
|
|||
|
|
### 步骤14:前端 —— 施工进度页(新建)
|
|||
|
|
|
|||
|
|
新建文件:
|
|||
|
|
- `/frontend/src/pages/construction/ConstructionProgress.tsx`
|
|||
|
|
|
|||
|
|
功能:
|
|||
|
|
- 手机友好的轻量确认台
|
|||
|
|
- 阶段进度条(顶部)
|
|||
|
|
- 当前阶段操作区(子项勾选、拍照、完成确认)
|
|||
|
|
- 阶段历史折叠
|
|||
|
|
|
|||
|
|
### 步骤15:前端 —— 采购订单物流详情
|
|||
|
|
|
|||
|
|
修改 `PurchaseOrdersPage.tsx`:
|
|||
|
|
- 增加物流信息Tab(预计送达、物流公司、运输状态)
|
|||
|
|
- 增加收货确认Tab(拍照、完整性检查)
|
|||
|
|
|
|||
|
|
### 步骤16:前端 —— 分包商管理增强
|
|||
|
|
|
|||
|
|
修改 `SubcontractorsPage.tsx` 和 `SubcontractorDetail.tsx`:
|
|||
|
|
- 分包商列表增加分数列
|
|||
|
|
- 详情增加事件记录Tab
|
|||
|
|
- 事件添加弹出表单(事件类型、分数变化、标题、描述)
|
|||
|
|
|
|||
|
|
### 步骤17:前端 —— 创建项目增加选模板步骤
|
|||
|
|
|
|||
|
|
修改 `ProjectsPage.tsx` 新建项目流程:
|
|||
|
|
- 步骤1:选择工程类型模板
|
|||
|
|
- 步骤2:填写基本信息
|
|||
|
|
|
|||
|
|
修改 `BudgetProjectDetail.tsx` 签约流程:
|
|||
|
|
- 签约弹窗中增加模板选择
|
|||
|
|
|
|||
|
|
### 步骤18:前端 —— 施工日志调整
|
|||
|
|
|
|||
|
|
`ConstructionLog.tsx` → 从项目详情Tab中独立出来,也可以从施工总览页进入。
|
|||
|
|
|
|||
|
|
### 步骤19:前端 —— 菜单和路由更新
|
|||
|
|
|
|||
|
|
修改 `MainLayout.tsx`:
|
|||
|
|
- 施工管理菜单增加"施工总览"子项
|
|||
|
|
- 调整菜单结构一致
|
|||
|
|
|
|||
|
|
修改 `App.tsx`:
|
|||
|
|
- 增加施工总览、施工进度、模板管理路由
|
|||
|
|
|
|||
|
|
### 步骤20:清理和验证
|
|||
|
|
|
|||
|
|
- 删除旧的 `construction/ConstructionList.tsx`(已被施工总览替代)
|
|||
|
|
- 删除旧的 `construction/ConstructionMilestones.tsx`(已被施工进度替代)
|
|||
|
|
- 全套测试:创建模板 → 创建项目 → 推进阶段 → 采购订单 → 物流 → 收货 → 分包评分
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十二、预制数据
|
|||
|
|
|
|||
|
|
### 物流记录状态枚举
|
|||
|
|
```
|
|||
|
|
pending 待发货
|
|||
|
|
in_transit 运输中
|
|||
|
|
at_customs 海关清关中
|
|||
|
|
at_hub 中转仓
|
|||
|
|
secondary 二次运输中
|
|||
|
|
arrived 已到达现场
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 项目状态枚举
|
|||
|
|
```
|
|||
|
|
planning 已立项
|
|||
|
|
active 施工中
|
|||
|
|
suspended 暂停
|
|||
|
|
completed 已完工
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 阶段状态枚举
|
|||
|
|
```
|
|||
|
|
pending 待开始
|
|||
|
|
in_progress 进行中
|
|||
|
|
completed 已完成
|
|||
|
|
skipped 已跳过
|
|||
|
|
```
|