import { API_BASE_URL, request } from "./request";
|
import type { PageResult } from "./basic-data";
|
|
const header = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` });
|
|
type QueryValue = string | number | boolean | string[] | number[] | undefined;
|
|
function query(params: Record<string, QueryValue>) {
|
const parts: string[] = [];
|
Object.entries(params).forEach(([key, value]) => {
|
if (value === undefined || value === null || value === "") return;
|
const list = Array.isArray(value) ? value : [value];
|
list.forEach(item => {
|
if (item === undefined || item === null || item === "") return;
|
parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);
|
});
|
});
|
return parts.length ? `?${parts.join("&")}` : "";
|
}
|
|
/* ---------- 通用结构 ---------- */
|
|
export interface BpmUser {
|
id?: number;
|
username?: string;
|
nickname?: string;
|
mobile?: string;
|
avatar?: string;
|
deptId?: number;
|
}
|
|
export interface BpmSummaryItem {
|
key?: string;
|
value?: string;
|
}
|
|
/** 流程分类(/bpm/category/simple-list) */
|
export interface BpmCategory {
|
id?: number;
|
name?: string;
|
code?: string;
|
status?: number;
|
description?: string;
|
sort?: number;
|
}
|
|
/** 表单字段权限:'1' 只读 / '2' 可写 / '3' 隐藏 */
|
export type BpmFieldPermission = Record<string, string>;
|
|
/** 流程定义(/bpm/process-definition/*) */
|
export interface BpmProcessDefinition {
|
id?: string;
|
key?: string;
|
name?: string;
|
description?: string;
|
category?: string;
|
icon?: string;
|
/** 10 BPMN / 20 SIMPLE */
|
modelType?: number;
|
/** 10 流程表单 / 20 业务表单 */
|
formType?: number;
|
formCustomCreatePath?: string;
|
formCustomViewPath?: string;
|
/** 表单全局配置(JSON 字符串) */
|
formConf?: string;
|
/** 表单字段规则(每条为 JSON 字符串) */
|
formFields?: string[];
|
suspensionState?: number;
|
version?: number;
|
}
|
|
/** 流程实例(/bpm/process-instance/*) */
|
export interface BpmProcessInstance {
|
id?: string;
|
name?: string;
|
summary?: BpmSummaryItem[];
|
category?: string;
|
categoryName?: string;
|
/** -1 未开始 / 1 审批中 / 2 通过 / 3 不通过 / 4 已取消 */
|
status?: number;
|
/** 毫秒时间戳,部分接口返回 "yyyy-MM-dd HH:mm:ss" 字符串 */
|
startTime?: number | string;
|
endTime?: number | string;
|
createTime?: number | string;
|
processDefinitionId?: string;
|
processDefinitionKey?: string;
|
processDefinition?: BpmProcessDefinition;
|
startUser?: BpmUser;
|
/** 字段名 -> 值 */
|
formVariables?: Record<string, any>;
|
businessKey?: string;
|
tasks?: BpmTask[];
|
}
|
|
/** 任务(/bpm/task/*) */
|
export interface BpmTask {
|
id?: string;
|
name?: string;
|
/** 0 待审批 / 1 审批中 / 2 通过 / 3 不通过 / 4 已取消 / 5 退回 / 7 审批通过中 */
|
status?: number;
|
/** 毫秒时间戳,部分接口返回 "yyyy-MM-dd HH:mm:ss" 字符串 */
|
createTime?: number | string;
|
endTime?: number | string;
|
startTime?: number | string;
|
durationInMillis?: number;
|
reason?: string;
|
processInstanceId?: string;
|
processInstance?: BpmProcessInstance;
|
taskDefinitionKey?: string;
|
assigneeUser?: BpmUser;
|
ownerUser?: BpmUser;
|
formId?: number;
|
signEnable?: boolean;
|
children?: BpmTask[];
|
buttonsSetting?: Record<string, { enable?: boolean; displayName?: string }>;
|
}
|
|
/** 抄送(/bpm/process-instance/copy/page) */
|
export interface BpmProcessInstanceCopy {
|
id?: number;
|
activityId?: string;
|
activityName?: string;
|
createTime?: number | string;
|
createUser?: BpmUser;
|
processInstanceId?: string;
|
processInstanceName?: string;
|
processInstanceStartTime?: number | string;
|
reason?: string;
|
startUser?: BpmUser;
|
summary?: BpmSummaryItem[];
|
taskId?: string;
|
}
|
|
/** 审批节点(时间线 / 流转记录) */
|
export interface BpmApprovalNode {
|
id?: string;
|
name?: string;
|
nodeType?: number;
|
candidateStrategy?: number;
|
candidateUsers?: BpmUser[];
|
status?: number;
|
/** 毫秒时间戳,部分接口返回 "yyyy-MM-dd HH:mm:ss" 字符串 */
|
startTime?: number | string;
|
endTime?: number | string;
|
processInstanceId?: string;
|
tasks?: BpmApprovalTaskInfo[];
|
}
|
|
export interface BpmApprovalTaskInfo {
|
id?: number;
|
assigneeUser?: BpmUser;
|
ownerUser?: BpmUser;
|
reason?: string;
|
signPicUrl?: string;
|
status?: number;
|
attachments?: string[];
|
}
|
|
/** 审批详情(/bpm/process-instance/get-approval-detail) */
|
export interface BpmApprovalDetail {
|
activityNodes?: BpmApprovalNode[];
|
formFieldsPermission?: BpmFieldPermission;
|
processDefinition?: BpmProcessDefinition;
|
processInstance?: BpmProcessInstance;
|
status?: number;
|
todoTask?: BpmTask;
|
}
|
|
/* ---------- 字典数据(复用 crm 的通用字典接口) ---------- */
|
|
export { getSimpleDictDataList, type DictData } from "./crm";
|
|
/* ---------- 用户 ---------- */
|
|
export function getBpmSimpleUserList(accessToken: string) {
|
return request<BpmUser[]>("/system/user/simple-list", { header: header(accessToken) });
|
}
|
|
export function getBpmUserPage(accessToken: string, params: { pageNo: number; pageSize: number; nickname?: string; username?: string; mobile?: string; status?: number }) {
|
return request<PageResult<BpmUser>>(`/system/user/page${query(params)}`, { header: header(accessToken) });
|
}
|
|
export function getBpmUserListByIds(accessToken: string, ids: number[]) {
|
return request<BpmUser[]>(`/system/user/list${query({ ids: ids.join(",") })}`, { header: header(accessToken) });
|
}
|
|
/** 部门树(发起流程候选人、部门选择器用) */
|
export interface BpmDept {
|
id?: number;
|
name?: string;
|
parentId?: number;
|
children?: BpmDept[];
|
}
|
|
export function getBpmSimpleDeptList(accessToken: string) {
|
return request<BpmDept[]>("/system/dept/simple-list", { header: header(accessToken) });
|
}
|
|
/* ---------- 流程分类 ---------- */
|
|
export function getCategorySimpleList(accessToken: string) {
|
return request<BpmCategory[]>("/bpm/category/simple-list", { header: header(accessToken) });
|
}
|
|
export function getCategoryPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmCategory>>(`/bpm/category/page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
export function getCategory(accessToken: string, id: number) {
|
return request<BpmCategory>(`/bpm/category/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createCategory(accessToken: string, data: BpmCategory) {
|
return request<number>("/bpm/category/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateCategory(accessToken: string, data: BpmCategory) {
|
return request<boolean>("/bpm/category/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteCategory(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/category/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export interface BpmFormConfig {
|
id?: number;
|
name: string;
|
conf?: string;
|
fields?: string[];
|
status?: number;
|
remark?: string;
|
createTime?: number | string;
|
}
|
|
export function getFormPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmFormConfig>>(`/bpm/form/page${query(params)}`, { header: header(accessToken) });
|
}
|
|
export function getForm(accessToken: string, id: number) {
|
return request<BpmFormConfig>(`/bpm/form/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createForm(accessToken: string, data: BpmFormConfig) {
|
return request<number>("/bpm/form/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateForm(accessToken: string, data: BpmFormConfig) {
|
return request<boolean>("/bpm/form/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteForm(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/form/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export function getFormSimpleList(accessToken: string) {
|
return request<BpmFormConfig[]>("/bpm/form/simple-list", { header: header(accessToken) });
|
}
|
|
export interface BpmModelProcessDefinition {
|
id?: string;
|
key?: string;
|
version?: number;
|
deploymentTime?: number | string;
|
suspensionState?: number;
|
}
|
|
export interface BpmModel {
|
id?: number;
|
key: string;
|
name: string;
|
icon?: string;
|
description?: string;
|
category?: string;
|
formName?: string;
|
formType?: number;
|
formId?: number;
|
formCustomCreatePath?: string;
|
formCustomViewPath?: string;
|
processDefinition?: BpmModelProcessDefinition;
|
status?: number;
|
remark?: string;
|
createTime?: string;
|
bpmnXml?: string;
|
startUsers?: BpmUser[];
|
}
|
|
export function getModelList(accessToken: string, name?: string) {
|
return request<BpmModel[]>(`/bpm/model/list${query({ name })}`, { header: header(accessToken) });
|
}
|
|
export function getModel(accessToken: string, id: number | string) {
|
return request<BpmModel>(`/bpm/model/get${query({ id: String(id) })}`, { header: header(accessToken) });
|
}
|
|
export function createModel(accessToken: string, data: BpmModel) {
|
return request<number>("/bpm/model/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateModel(accessToken: string, data: BpmModel) {
|
return request<boolean>("/bpm/model/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function updateModelState(accessToken: string, id: number, state: number) {
|
return request<boolean>("/bpm/model/update-state", {
|
method: "PUT",
|
data: { id, state },
|
header: header(accessToken),
|
});
|
}
|
|
export function deployModel(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/model/deploy${query({ id })}`, { method: "POST", header: header(accessToken) });
|
}
|
|
export function cleanModel(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/model/clean${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export function deleteModel(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/model/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export interface BpmUserGroup {
|
id?: number;
|
name: string;
|
description?: string;
|
userIds?: number[];
|
status?: number;
|
remark?: string;
|
createTime?: string;
|
}
|
|
export function getUserGroupPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmUserGroup>>(`/bpm/user-group/page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
export function getUserGroup(accessToken: string, id: number) {
|
return request<BpmUserGroup>(`/bpm/user-group/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createUserGroup(accessToken: string, data: BpmUserGroup) {
|
return request<number>("/bpm/user-group/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateUserGroup(accessToken: string, data: BpmUserGroup) {
|
return request<boolean>("/bpm/user-group/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteUserGroup(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/user-group/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export interface BpmProcessListener {
|
id?: number;
|
name: string;
|
type?: number;
|
status?: number;
|
event?: string;
|
valueType?: number;
|
value?: string;
|
createTime?: number | string;
|
}
|
|
export function getProcessListenerPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmProcessListener>>(`/bpm/process-listener/page${query(params)}`, { header: header(accessToken) });
|
}
|
|
export function getProcessListener(accessToken: string, id: number) {
|
return request<BpmProcessListener>(`/bpm/process-listener/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createProcessListener(accessToken: string, data: BpmProcessListener) {
|
return request<number>("/bpm/process-listener/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateProcessListener(accessToken: string, data: BpmProcessListener) {
|
return request<boolean>("/bpm/process-listener/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteProcessListener(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/process-listener/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export interface BpmProcessExpression {
|
id?: number;
|
name: string;
|
status?: number;
|
expression?: string;
|
createTime?: number | string;
|
}
|
|
export function getProcessExpressionPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmProcessExpression>>(`/bpm/process-expression/page${query(params)}`, { header: header(accessToken) });
|
}
|
|
export function getProcessExpression(accessToken: string, id: number) {
|
return request<BpmProcessExpression>(`/bpm/process-expression/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createProcessExpression(accessToken: string, data: BpmProcessExpression) {
|
return request<number>("/bpm/process-expression/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateProcessExpression(accessToken: string, data: BpmProcessExpression) {
|
return request<boolean>("/bpm/process-expression/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteProcessExpression(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/process-expression/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
export interface BpmBusinessAttach {
|
id?: number;
|
name: string;
|
code?: string;
|
status?: number;
|
processDefinitionKey?: string;
|
taskDefinitionKey?: string;
|
fileTypes?: string;
|
maxSize?: number;
|
required?: boolean;
|
remark?: string;
|
createTime?: number | string;
|
}
|
|
export function getBusinessAttachPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string }) {
|
return request<PageResult<BpmBusinessAttach>>(`/bpm/business-attach/page${query(params)}`, { header: header(accessToken) });
|
}
|
|
export function getBusinessAttach(accessToken: string, id: number) {
|
return request<BpmBusinessAttach>(`/bpm/business-attach/get${query({ id })}`, { header: header(accessToken) });
|
}
|
|
export function createBusinessAttach(accessToken: string, data: BpmBusinessAttach) {
|
return request<number>("/bpm/business-attach/create", { method: "POST", data, header: header(accessToken) });
|
}
|
|
export function updateBusinessAttach(accessToken: string, data: BpmBusinessAttach) {
|
return request<boolean>("/bpm/business-attach/update", { method: "PUT", data, header: header(accessToken) });
|
}
|
|
export function deleteBusinessAttach(accessToken: string, id: number) {
|
return request<boolean>(`/bpm/business-attach/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
|
/* ---------- 流程定义 ---------- */
|
|
/** 启用中的流程定义列表(发起流程页面用,suspensionState 为必填) */
|
export function getProcessDefinitionList(accessToken: string, suspensionState = 1) {
|
return request<BpmProcessDefinition[]>(
|
`/bpm/process-definition/list${query({ suspensionState })}`,
|
{ header: header(accessToken) },
|
);
|
}
|
|
/**
|
* 流程定义精简列表(筛选项下拉用)
|
* 与 web 端 getSimpleProcessDefinitionList 一致,返回 PageResult(取 .list)
|
* 注意:不能改用 /list —— 那个接口要求 suspensionState 必填
|
*/
|
export function getSimpleProcessDefinitionList(accessToken: string) {
|
return request<PageResult<BpmProcessDefinition>>("/bpm/process-definition/simple-list", {
|
header: header(accessToken),
|
});
|
}
|
|
export function getProcessDefinition(accessToken: string, params: { id?: string; key?: string }) {
|
return request<BpmProcessDefinition>(`/bpm/process-definition/get${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/* ---------- 流程实例 ---------- */
|
|
export interface ProcessInstancePageParams {
|
pageNo: number;
|
pageSize: number;
|
name?: string;
|
processDefinitionId?: string;
|
processDefinitionKey?: string;
|
category?: string;
|
status?: number;
|
createTime?: number[];
|
}
|
|
/** 我的流程分页 */
|
export function getProcessInstanceMyPage(accessToken: string, params: ProcessInstancePageParams) {
|
return request<PageResult<BpmProcessInstance>>(`/bpm/process-instance/my-page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/** 流程实例管理分页 */
|
export function getProcessInstanceManagerPage(accessToken: string, params: ProcessInstancePageParams) {
|
return request<PageResult<BpmProcessInstance>>(`/bpm/process-instance/manager-page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
export function getProcessInstance(accessToken: string, id: string) {
|
return request<BpmProcessInstance>(`/bpm/process-instance/get?id=${encodeURIComponent(id)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/** 审批详情(任务详情页核心接口) */
|
export function getApprovalDetail(
|
accessToken: string,
|
params: { processInstanceId: string; taskId?: string; activityId?: string },
|
) {
|
return request<BpmApprovalDetail>(`/bpm/process-instance/get-approval-detail${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/**
|
* 发起阶段的流程节点预测
|
*
|
* 与上面的 getApprovalDetail 形态不同:web 端发起时传的是**流程定义 id**(不是 processInstanceId)
|
* 加 processVariablesStr,后端依此预测审批节点与「发起人自选审批人」候选。
|
* 见 web 端 create/modules/form.vue 第 152、182 行。
|
*/
|
export function getStartApprovalNodes(
|
accessToken: string,
|
params: { processDefinitionId: string; activityId?: string; processVariablesStr?: string },
|
) {
|
return request<BpmApprovalDetail>(`/bpm/process-instance/get-approval-detail${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/** 发起流程 */
|
export function createProcessInstance(
|
accessToken: string,
|
data: {
|
processDefinitionId?: string;
|
variables: Record<string, any>;
|
startUserSelectAssignees?: Record<string, number[]>;
|
},
|
) {
|
return request<BpmProcessInstance>("/bpm/process-instance/create", {
|
method: "POST",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 发起人取消流程(DELETE + body) */
|
export function cancelProcessInstanceByStartUser(
|
accessToken: string,
|
data: { id: string; reason: string },
|
) {
|
return request<boolean>("/bpm/process-instance/cancel-by-start-user", {
|
method: "DELETE",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 抄送我的分页 */
|
export function getProcessInstanceCopyPage(
|
accessToken: string,
|
params: ProcessInstancePageParams,
|
) {
|
return request<PageResult<BpmProcessInstanceCopy>>(
|
`/bpm/process-instance/copy/page${query(params)}`,
|
{ header: header(accessToken) },
|
);
|
}
|
|
/** 审批时获取下一个节点的审批人(自选审批人 / 网关分支) */
|
export function getNextApprovalNodes(
|
accessToken: string,
|
params: { processInstanceId: string; taskId?: string; activityId?: string; processVariablesStr?: string },
|
) {
|
return request<BpmApprovalDetail>(`/bpm/process-instance/get-next-approval-nodes${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/* ---------- 任务 ---------- */
|
|
export interface TaskPageParams {
|
pageNo: number;
|
pageSize: number;
|
name?: string;
|
processDefinitionKey?: string;
|
category?: string;
|
status?: number;
|
createTime?: number[];
|
}
|
|
/** 待办任务分页 */
|
export function getTaskTodoPage(accessToken: string, params: TaskPageParams) {
|
return request<PageResult<BpmTask>>(`/bpm/task/todo-page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/** 已办任务分页 */
|
export function getTaskDonePage(accessToken: string, params: TaskPageParams) {
|
return request<PageResult<BpmTask>>(`/bpm/task/done-page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
/** 流程任务管理分页 */
|
export function getTaskManagerPage(accessToken: string, params: TaskPageParams) {
|
return request<PageResult<BpmTask>>(`/bpm/task/manager-page${query(params)}`, {
|
header: header(accessToken),
|
});
|
}
|
|
export interface OaNotice {
|
id?: number; title: string; content: string; type: number; status: number; sendScope: number;
|
isTop?: number; publishUserId?: number; publishTime?: string; createTime?: string; userIds?: number[];
|
}
|
export function getNoticePage(accessToken: string, params: { pageNo: number; pageSize: number; title?: string; type?: number; status?: number; sendScope?: number }) {
|
return request<PageResult<OaNotice>>(`/bpm/oa/notice/page${query(params)}`, { header: header(accessToken) });
|
}
|
export function getNotice(accessToken: string, id: number) { return request<OaNotice>(`/bpm/oa/notice/get${query({ id })}`, { header: header(accessToken) }); }
|
export function createNotice(accessToken: string, data: OaNotice) { return request<number>("/bpm/oa/notice/create", { method: "POST", data, header: header(accessToken) }); }
|
export function updateNotice(accessToken: string, data: OaNotice) { return request<boolean>("/bpm/oa/notice/update", { method: "PUT", data, header: header(accessToken) }); }
|
export function deleteNotice(accessToken: string, id: number) { return request<boolean>(`/bpm/oa/notice/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) }); }
|
|
/** 审批通过 */
|
export function approveTask(
|
accessToken: string,
|
data: {
|
id: string;
|
reason?: string;
|
attachments?: string[];
|
variables?: Record<string, any>;
|
nextAssignees?: Record<string, number[]>;
|
signPicUrl?: string;
|
},
|
) {
|
return request<boolean>("/bpm/task/approve", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 审批驳回(拒绝后直接结束流程) */
|
export function rejectTask(
|
accessToken: string,
|
data: { id: string; reason?: string; attachments?: string[] },
|
) {
|
return request<boolean>("/bpm/task/reject", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 退回到指定节点 */
|
export function returnTask(
|
accessToken: string,
|
data: { id: string; reason?: string; targetTaskDefinitionKey: string },
|
) {
|
return request<boolean>("/bpm/task/return", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 可退回的节点列表 */
|
export function getTaskListByReturn(accessToken: string, id: string) {
|
return request<Array<{ taskDefinitionKey?: string; name?: string }>>(
|
`/bpm/task/list-by-return?id=${encodeURIComponent(id)}`,
|
{ header: header(accessToken) },
|
);
|
}
|
|
/** 转办 */
|
export function transferTask(
|
accessToken: string,
|
data: { id: string; reason?: string; assigneeUserId: number },
|
) {
|
return request<boolean>("/bpm/task/transfer", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 委派 */
|
export function delegateTask(
|
accessToken: string,
|
data: { id: string; reason?: string; delegateUserId: number },
|
) {
|
return request<boolean>("/bpm/task/delegate", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 加签 */
|
export function signCreateTask(
|
accessToken: string,
|
data: { id: string; type: "after" | "before"; reason?: string; userIds: number[] },
|
) {
|
return request<boolean>("/bpm/task/create-sign", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 减签(id 为被减签的子任务 id) */
|
export function signDeleteTask(accessToken: string, data: { id: string; reason?: string }) {
|
return request<boolean>("/bpm/task/delete-sign", {
|
method: "DELETE",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 抄送 */
|
export function copyTask(
|
accessToken: string,
|
data: { id: string; reason?: string; copyUserIds: number[] },
|
) {
|
return request<boolean>("/bpm/task/copy", {
|
method: "PUT",
|
data,
|
header: header(accessToken),
|
});
|
}
|
|
/** 撤回任务(PUT + query,body 为 null) */
|
export function withdrawTask(accessToken: string, taskId: string) {
|
return request<boolean>(`/bpm/task/withdraw?taskId=${encodeURIComponent(taskId)}`, {
|
method: "PUT",
|
header: header(accessToken),
|
});
|
}
|
|
/** 按流程实例查询全部审批任务(流转记录) */
|
export function getTaskListByProcessInstanceId(accessToken: string, processInstanceId: string) {
|
return request<BpmTask[]>(
|
`/bpm/task/list-by-process-instance-id?processInstanceId=${encodeURIComponent(processInstanceId)}`,
|
{ header: header(accessToken) },
|
);
|
}
|
|
/* ---------- 文件上传 ---------- */
|
|
export interface BpmUploadResult {
|
id?: number;
|
name?: string;
|
url?: string;
|
path?: string;
|
size?: number;
|
type?: string;
|
}
|
|
/** 上传 BPM 附件 / 签名图片(字段名 file,与 web 端 requestClient.upload 一致) */
|
export function uploadBpmFile(accessToken: string, filePath: string, directory = "bpm/task-attachment") {
|
return new Promise<BpmUploadResult>((resolve, reject) => {
|
uni.uploadFile({
|
url: `${API_BASE_URL}/infra/file/upload`,
|
filePath,
|
name: "file",
|
header: { Authorization: `Bearer ${accessToken}` },
|
formData: { directory },
|
success: response => {
|
try {
|
const data = JSON.parse(response.data) as {
|
code?: number;
|
msg?: string;
|
data?: BpmUploadResult;
|
};
|
if (data.code === 0 && data.data) resolve(data.data);
|
else reject(new Error(data.msg || "文件上传失败"));
|
} catch {
|
reject(new Error("文件上传响应解析失败"));
|
}
|
},
|
fail: () => reject(new Error("文件上传失败,请检查网络后重试")),
|
});
|
});
|
}
|
|
/** 本地选中的待上传文件 */
|
export interface BpmPickedFile {
|
path: string;
|
name?: string;
|
}
|
|
/**
|
* 跨端文件选择(H5 / 微信小程序 / App 三端兼容)
|
* - H5 / App:uni.chooseFile
|
* - 微信小程序:uni.chooseMessageFile(uni.chooseFile 在小程序不可用)
|
*/
|
export function chooseBpmFile(count = 9): Promise<BpmPickedFile[]> {
|
return new Promise((resolve, reject) => {
|
const onSuccess = (files: BpmPickedFile[]) => resolve(files);
|
const onFail = (error: unknown) => reject(error);
|
|
// #ifdef MP-WEIXIN
|
uni.chooseMessageFile({
|
count,
|
type: "file",
|
success: result => {
|
onSuccess(
|
(result.tempFiles || [])
|
.map(item => ({ path: item.path, name: item.name }))
|
.filter(item => Boolean(item.path)),
|
);
|
},
|
fail: onFail,
|
});
|
// #endif
|
|
// #ifndef MP-WEIXIN
|
uni.chooseFile({
|
count,
|
success: result => {
|
onSuccess(
|
(result.tempFiles || [])
|
.map(item => ({ path: item.path, name: item.name }))
|
.filter(item => Boolean(item.path)),
|
);
|
},
|
fail: onFail,
|
});
|
// #endif
|
});
|
}
|
|
/** 跨端选择图片(签名图片、图片类附件) */
|
export function chooseBpmImage(count = 1): Promise<BpmPickedFile[]> {
|
return new Promise((resolve, reject) => {
|
uni.chooseImage({
|
count,
|
success: result => {
|
resolve((result.tempFilePaths || []).map(path => ({ path })));
|
},
|
fail: reject,
|
});
|
});
|
}
|