14 KiB
14 KiB
财务查看功能使用说明
概述
收入确认在抄送财务时,状态已经是"已通过",财务只是查看,不需要再次审核。如果财务发现问题,可以标记为"未通过"。
审批接口
接口地址: POST /user/approval_processing
接口描述: 处理审批待办,支持审核通过、审核未通过等操作。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| token | String | 是 | 用户认证token(请求头) |
| id | Integer | 是 | 审批记录ID(从待办列表获取) |
| type | String | 是 | 审批类型,收入确认为 "收入确认" |
| state | String | 否 | 审核状态:"已通过" 或 "未通过"财务查看时可不传(默认为"已通过") 非财务审核时必填 |
| allocate | String | 否 | 收入分配(仅当状态为"待负责人填写分配"时必填) |
请求示例
1. 财务查看收入确认(默认通过,推荐方式)
{
"id": 10,
"type": "收入确认"
}
说明:
- 财务查看时,只需要传
id和type,不需要传state - 系统会自动判断:如果是财务查看(
personincharge为财务且state为"已抄送财务"),默认state为"已通过" - 接口会直接返回成功,状态保持"已通过"(因为已经是"已通过")
2. 财务标记为未通过(发现问题)
{
"id": 10,
"type": "收入确认",
"state": "未通过"
}
说明:
- 如果财务发现问题,需要传
state: "未通过" - 接口会将收入确认状态更新为"未通过"
- 审批记录状态也会更新为"未通过"
3. 负责人填写收入分配
{
"id": 10,
"type": "收入确认",
"state": "已通过",
"allocate": "50%分配给A,50%分配给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:个人团队提交的收入确认
-
提交阶段:
- 用户提交收入确认
- 状态直接设为
"已通过" - 直接抄送财务,审批状态为
"已抄送财务"
-
财务查看:
- 财务在待办列表中看到该收入确认
- 调用审批接口,
state传"已通过"(表示查看通过) - 接口直接返回成功,状态保持
"已通过"
-
财务发现问题:
- 如果财务发现问题,调用审批接口,
state传"未通过" - 收入确认状态更新为
"未通过" - 审批记录状态也更新为
"未通过"
- 如果财务发现问题,调用审批接口,
场景2:团队类型提交的收入确认
-
提交阶段:
- 用户提交收入确认
- 状态为
"审核中" - 创建待办事项,第一个审核人审核
-
审核阶段:
- 审核人依次审核(按顺序)
- 所有审核人通过后,状态变为
"待负责人填写分配"
-
负责人填写分配:
- 负责人调用审批接口,填写
allocate字段 - 状态自动变为
"已通过" - 抄送财务,审批状态为
"已抄送财务"
- 负责人调用审批接口,填写
-
财务查看:
- 财务在待办列表中看到该收入确认
- 调用审批接口,
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%分配给A,50%分配给B"
})
});
const data = await response.json();
return data;
}
状态说明
收入确认状态(Income.state)
| 状态 | 说明 | 何时出现 |
|---|---|---|
"审核中" |
正在审核中 | 团队类型,审核人正在审核 |
"待负责人填写分配" |
待负责人填写收入分配 | 所有审核人通过后 |
"已通过" |
审核通过 | 抄送财务时就已经是"已通过",财务只是查看 |
"未通过" |
审核未通过 | 审核人未通过或财务发现问题 |
审批记录状态(Approval.state)
| 状态 | 说明 | 何时出现 |
|---|---|---|
"审核中" |
正在审核中 | 审核人正在审核 |
"已抄送财务" |
已抄送财务 | 抄送财务时(收入确认状态已经是"已通过") |
"已通过" |
审批通过 | 财务查看通过或审批完成 |
"未通过" |
审批未通过 | 审核人未通过或财务标记为未通过 |
注意事项
-
财务查看逻辑:
- 抄送财务时,收入确认状态已经是
"已通过" - 财务调用审批接口时,
state传"已通过"表示查看通过,不会改变状态 - 只有财务标记为
"未通过"时,才会改变状态
- 抄送财务时,收入确认状态已经是
-
权限判断:
- 接口会自动判断当前用户是否是财务部门
- 只有财务部门的人员才能看到
personincharge为财务的待办
-
状态流转:
- 个人团队:提交 →
"已通过"→ 抄送财务 - 团队类型:提交 →
"审核中"→"待负责人填写分配"→"已通过"→ 抄送财务
- 个人团队:提交 →
-
金额统计:
- 只有状态为
"已通过"的收入确认才会计入金额统计 - 抄送财务时已经是
"已通过",所以会立即计入统计
- 只有状态为
完整流程示例
示例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%分配给A,50%分配给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参数,只传id和type,系统会自动判断为财务查看通过 - 如果发现问题,传
state: "未通过",状态会更新为"未通过"
Q3: 收入确认什么时候状态变为"已通过"?
A:
- 个人团队:提交时就是
"已通过" - 团队类型:负责人填写收入分配后,状态变为
"已通过",然后抄送财务
Q4: 财务可以修改收入确认的金额吗?
A: 不可以。财务只能查看,如果发现问题,可以标记为 "未通过"。如果需要修改,应该联系提交人重新提交。
Q5: 如何判断当前用户是否是财务?
A: 系统会自动判断:
- 用户的部门包含"财务部"
- 用户的角色包含"财务部"
- 审批记录的
personincharge是财务部门ID或"财务"字符串