Files
jyls_django/财务查看功能使用说明.md
2026-01-20 14:39:10 +08:00

14 KiB
Raw Blame History

财务查看功能使用说明

概述

收入确认在抄送财务时,状态已经是"已通过",财务只是查看,不需要再次审核。如果财务发现问题,可以标记为"未通过"。

审批接口

接口地址: POST /user/approval_processing

接口描述: 处理审批待办,支持审核通过、审核未通过等操作。

请求参数

参数名 类型 必填 说明
token String 用户认证token请求头
id Integer 审批记录ID从待办列表获取
type String 审批类型,收入确认为 "收入确认"
state String 审核状态:"已通过""未通过"
财务查看时可不传(默认为"已通过"
非财务审核时必填
allocate String 收入分配(仅当状态为"待负责人填写分配"时必填)

请求示例

1. 财务查看收入确认(默认通过,推荐方式)

{
  "id": 10,
  "type": "收入确认"
}

说明:

  • 财务查看时,只需要传 idtype,不需要传 state
  • 系统会自动判断:如果是财务查看(personincharge 为财务且 state 为"已抄送财务"),默认 state"已通过"
  • 接口会直接返回成功,状态保持"已通过"(因为已经是"已通过"

2. 财务标记为未通过(发现问题)

{
  "id": 10,
  "type": "收入确认",
  "state": "未通过"
}

说明:

  • 如果财务发现问题,需要传 state: "未通过"
  • 接口会将收入确认状态更新为"未通过"
  • 审批记录状态也会更新为"未通过"

3. 负责人填写收入分配

{
  "id": 10,
  "type": "收入确认",
  "state": "已通过",
  "allocate": "50%分配给A50%分配给B"
}

说明:

  • 当收入确认状态为"待负责人填写分配"时,负责人必须填写 allocate 字段
  • 填写后,状态自动变为"已通过",并抄送财务
  • 财务收到时状态已经是"已通过",财务只是查看

返回数据

成功响应:

{
  "message": "处理成功",
  "code": 0
}

失败响应:

{
  "status": "error",
  "message": "收入确认记录不存在或已被删除",
  "code": 1
}

查询待办审核状态

接口地址: POST /user/approval-status-check

接口描述: 查询待办是否已经审核完全通过,用于前端判断待办状态。

请求参数

参数名 类型 必填 说明
token String 用户认证token请求头
id Integer 审批记录ID
type String 审批类型,如 "收入确认""开票"

请求示例

{
  "id": 10,
  "type": "收入确认"
}

返回数据

成功响应:

{
  "message": "查询成功",
  "code": 0,
  "data": {
    "approval_id": 10,
    "approval_state": "已抄送财务",
    "business_state": "已通过",
    "is_approved": true,
    "type": "收入确认"
  }
}

字段说明

  • approval_id审批记录ID
  • approval_state:审批记录状态(审核中/已抄送财务/已通过/未通过)
  • business_state:业务记录状态(如收入确认的状态)
  • is_approved:是否已经审核完全通过
    • true:业务记录状态为"已通过"(或"已完成"
    • false:业务记录状态不是"已通过"
  • type:审批类型

获取待办列表

接口地址: POST /user/roxyexhibition

接口描述: 获取当前用户的待办列表,包括收入确认的待办事项。

请求参数

参数名 类型 必填 说明
token String 用户认证token请求头
page Integer 页码从1开始
per_page Integer 每页数量
type String 筛选类型,如 "收入确认"

请求示例

{
  "page": 1,
  "per_page": 10,
  "type": "收入确认"
}

返回数据

成功响应:

{
  "message": "展示成功",
  "total": 5,
  "code": 0,
  "data": [
    {
      "id": 10,
      "title": "张三提交收入确认",
      "content": "张三在2024-01-15提交了收入确认合同编号HT2024001客户名称某某公司收款金额10000收入分配待负责人指定已抄送财务部",
      "times": "2024-01-15",
      "personincharge": "财务",
      "state": "已抄送财务",
      "type": "收入确认",
      "user_id": "1"
    }
  ]
}

字段说明

  • id审批记录ID用于调用审批处理接口
  • type:审批类型,收入确认为 "收入确认"
  • state:审批状态
    • "审核中":正在审核中
    • "已抄送财务":已抄送财务,财务可以查看
    • "已通过":审核通过
    • "未通过":审核未通过
  • personincharge:当前负责人
    • 如果是财务部门ID或"财务",表示已抄送财务
  • user_id关联的业务记录ID收入确认记录ID

财务查看流程

场景1个人团队提交的收入确认

  1. 提交阶段

    • 用户提交收入确认
    • 状态直接设为 "已通过"
    • 直接抄送财务,审批状态为 "已抄送财务"
  2. 财务查看

    • 财务在待办列表中看到该收入确认
    • 调用审批接口,state"已通过"(表示查看通过)
    • 接口直接返回成功,状态保持 "已通过"
  3. 财务发现问题

    • 如果财务发现问题,调用审批接口,state"未通过"
    • 收入确认状态更新为 "未通过"
    • 审批记录状态也更新为 "未通过"

场景2团队类型提交的收入确认

  1. 提交阶段

    • 用户提交收入确认
    • 状态为 "审核中"
    • 创建待办事项,第一个审核人审核
  2. 审核阶段

    • 审核人依次审核(按顺序)
    • 所有审核人通过后,状态变为 "待负责人填写分配"
  3. 负责人填写分配

    • 负责人调用审批接口,填写 allocate 字段
    • 状态自动变为 "已通过"
    • 抄送财务,审批状态为 "已抄送财务"
  4. 财务查看

    • 财务在待办列表中看到该收入确认
    • 调用审批接口,state"已通过"(表示查看通过)
    • 接口直接返回成功,状态保持 "已通过"

代码示例

前端调用示例JavaScript

// 1. 获取待办列表
async function getTodoList(page = 1, perPage = 10) {
  const response = await fetch('/user/roxyexhibition', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token')
    },
    body: JSON.stringify({
      page: page,
      per_page: perPage,
      type: '收入确认'  // 可选,筛选收入确认类型
    })
  });
  const data = await response.json();
  return data;
}

// 2. 查询待办审核状态(判断是否已审核通过)
async function checkApprovalStatus(approvalId, type = '收入确认') {
  const response = await fetch('/user/approval-status-check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token')
    },
    body: JSON.stringify({
      id: approvalId,
      type: type
    })
  });
  const data = await response.json();
  return data;
}

// 3. 财务查看通过(默认操作,推荐方式)
async function financeViewPass(approvalId, type = '收入确认') {
  const response = await fetch('/user/approval_processing', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token')
    },
    body: JSON.stringify({
      id: approvalId,
      type: type
      // 不传state财务查看时默认为"已通过"
    })
  });
  const data = await response.json();
  return data;
}

// 4. 财务标记为未通过(发现问题)
async function financeMarkReject(approvalId, type = '收入确认') {
  const response = await fetch('/user/approval_processing', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token')
    },
    body: JSON.stringify({
      id: approvalId,
      type: type,
      state: '未通过'  // 财务发现问题,标记为未通过
    })
  });
  const data = await response.json();
  return data;
}

// 5. 负责人填写收入分配
async function fillAllocate(approvalId, allocate) {
  const response = await fetch('/user/approval_processing', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token')
    },
    body: JSON.stringify({
      id: approvalId,
      type: '收入确认',
      state: '已通过',
      allocate: allocate  // 收入分配,如:"50%分配给A50%分配给B"
    })
  });
  const data = await response.json();
  return data;
}

状态说明

收入确认状态Income.state

状态 说明 何时出现
"审核中" 正在审核中 团队类型,审核人正在审核
"待负责人填写分配" 待负责人填写收入分配 所有审核人通过后
"已通过" 审核通过 抄送财务时就已经是"已通过",财务只是查看
"未通过" 审核未通过 审核人未通过或财务发现问题

审批记录状态Approval.state

状态 说明 何时出现
"审核中" 正在审核中 审核人正在审核
"已抄送财务" 已抄送财务 抄送财务时(收入确认状态已经是"已通过"
"已通过" 审批通过 财务查看通过或审批完成
"未通过" 审批未通过 审核人未通过或财务标记为未通过

注意事项

  1. 财务查看逻辑

    • 抄送财务时,收入确认状态已经是 "已通过"
    • 财务调用审批接口时,state"已通过" 表示查看通过,不会改变状态
    • 只有财务标记为 "未通过" 时,才会改变状态
  2. 权限判断

    • 接口会自动判断当前用户是否是财务部门
    • 只有财务部门的人员才能看到 personincharge 为财务的待办
  3. 状态流转

    • 个人团队:提交 → "已通过" → 抄送财务
    • 团队类型:提交 → "审核中""待负责人填写分配""已通过" → 抄送财务
  4. 金额统计

    • 只有状态为 "已通过" 的收入确认才会计入金额统计
    • 抄送财务时已经是 "已通过",所以会立即计入统计

完整流程示例

示例1个人团队提交收入确认

// 1. 用户提交收入确认
const submitResponse = await fetch('/finance/confirm', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'token': userToken
  },
  body: JSON.stringify({
    case_id: 123,
    times: '2024-01-15',
    amount: '10000'
  })
});

// 返回:{ state: "已通过", approval_id: 10 }

// 2. 财务获取待办列表
const todoList = await getTodoList(1, 10);
// 财务看到:{ id: 10, type: "收入确认", state: "已抄送财务", personincharge: "财务" }

// 3. 财务查看通过
const viewResponse = await financeViewPass(10);
// 返回:{ message: "处理成功", code: 0 }
// 收入确认状态保持 "已通过"

示例2团队类型提交收入确认

// 1. 用户提交收入确认
const submitResponse = await fetch('/finance/confirm', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'token': userToken
  },
  body: JSON.stringify({
    case_id: 123,
    times: '2024-01-15',
    amount: '10000',
    approvers: [1, 2, 3]  // 审核人列表
  })
});

// 返回:{ state: "审核中", approval_id: 10 }

// 2. 审核人1审核通过
await fetch('/user/approval_processing', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'token': approver1Token
  },
  body: JSON.stringify({
    id: 10,
    type: '收入确认',
    state: '已通过'
  })
});

// 3. 审核人2审核通过
// ...(同上)

// 4. 审核人3审核通过后状态变为 "待负责人填写分配"

// 5. 负责人填写收入分配
await fillAllocate(10, '50%分配给A50%分配给B');
// 返回:{ state: "已通过" },已抄送财务

// 6. 查询待办审核状态
const statusResponse = await checkApprovalStatus(10, '收入确认');
// 返回:{ is_approved: true, business_state: "已通过" }

// 7. 财务查看通过只需要传id和type
await financeViewPass(10, '收入确认');
// 返回:{ message: "处理成功", code: 0 }

接口地址汇总

接口 地址 说明
获取待办列表 POST /user/roxyexhibition 获取当前用户的待办事项
查询待办审核状态 POST /user/approval-status-check 查询待办是否已经审核完全通过
审批处理 POST /user/approval_processing 处理审批待办(审核通过/未通过)
财务查看时只需传id和type
新增收入确认 POST /finance/confirm 创建收入确认记录
收入确认列表 POST /finance/confirmdisplay 查询收入确认列表

常见问题

Q1: 财务如何知道哪些收入确认需要查看?

A: 财务在待办列表接口中,筛选 type="收入确认"state="已抄送财务" 的记录。

Q2: 财务查看时,state 参数应该传什么?

A:

  • 推荐方式:不传 state 参数,只传 idtype,系统会自动判断为财务查看通过
  • 如果发现问题,传 state: "未通过",状态会更新为 "未通过"

Q3: 收入确认什么时候状态变为"已通过"

A:

  • 个人团队:提交时就是 "已通过"
  • 团队类型:负责人填写收入分配后,状态变为 "已通过",然后抄送财务

Q4: 财务可以修改收入确认的金额吗?

A: 不可以。财务只能查看,如果发现问题,可以标记为 "未通过"。如果需要修改,应该联系提交人重新提交。

Q5: 如何判断当前用户是否是财务?

A: 系统会自动判断:

  • 用户的部门包含"财务部"
  • 用户的角色包含"财务部"
  • 审批记录的 personincharge 是财务部门ID或"财务"字符串