在客服工作台 (@dashboard @customer-service) 中实现了"待跟进尾款项目"功能,该功能通过查询 Project 表和 ProjectPayment 表,自动识别并展示所有在售后阶段且尾款未结清的项目。
查询条件:
currentStage 包含:售后归档、尾款结算、客户评价、投诉处理、已归档、aftercare)isDeleted != true)付款计算逻辑:
data.quotation.total 字段获取订单总金额ProjectPayment 记录(包括预付款、里程碑付款和尾款)paid 的付款记录,得到已付金额状态判断:
type: 'final')且未支付,应付时间(dueDate)已过期每个待跟进项目卡片显示:
开始跟进按钮:
ActivityLog 表queryParams: { stage: 'aftercare', focus: 'payment' })查看详情按钮:
| 字段 | 用途 |
|---|---|
objectId |
项目唯一标识 |
title / name |
项目名称 |
currentStage |
项目当前阶段(用于筛选售后阶段项目) |
data.quotation.total |
订单总金额(从订单分配阶段保存) |
contact |
客户联系信息(Pointer → ContactInfo) |
deadline |
项目截止日期(作为应付时间的备选) |
isDeleted |
软删除标记 |
| 字段 | 用途 |
|---|---|
objectId |
付款记录唯一标识 |
project |
关联项目(Pointer → Project) |
type |
付款类型(advance/milestone/final) |
amount |
付款金额 |
status |
付款状态(pending/paid/overdue) |
dueDate |
应付时间 |
isDeleted |
软删除标记 |
dashboard.ts)// 接口定义(第 125-137 行)
pendingFinalPaymentProjects = signal<Array<{
id: string;
projectId: string;
projectName: string;
customerName: string;
customerPhone: string;
finalPaymentAmount: number; // 剩余未付金额
totalAmount: number; // 订单总金额
paidAmount: number; // 已付金额
dueDate: Date;
status: string; // 已逾期/待创建/待付款
overdueDay: number;
}>>([]);
// 数据加载方法(第 1256-1404 行)
private async loadPendingFinalPaymentProjects(): Promise<void> {
// 1. 查询售后阶段项目
// 2. 计算每个项目的付款情况
// 3. 筛选出有剩余金额的项目
// 4. 排序并更新信号
}
// 交互方法(第 1440-1483 行)
async followUpFinalPayment(projectId: string): Promise<void>
viewProjectDetail(projectId: string): void
dashboard.html)dashboard.scss)代码中添加了详细的控制台日志: