interface ServerProjectContext extends ProjectContext {
// 基础属性
$CAN_EDIT: boolean; // 是否可编辑
$CHILDREN: Array<Form>; // 子表单列表
$DELAY_LEVEL: DelayLevel; // 延迟级别信息
// @see /develop/entity/#enumerated-values
$FLOW: FlowEntity;
$META_FORM_FIELD: Record<string, any>; // 主表单字段值映射
$META_FORM_FIELD_2_VALUE: Record<string, { // 主表单字段值和类型映射
value: any;
type: string;
}>;
$META_FORM_RULE: Record<string, FormRule>; // 主表单规则映射
$META_FORM_TITLE: Record<string, any>; // 主表单标题值映射
$META_FORM_TITLE_2_VALUE: Record<string, { // 主表单标题值和类型映射
value: any;
type: string;
}>;
$ORG_CFG: OrgConfig; // 组织配置信息
$P: Record<string, boolean>; // 权限判定方法集合
$PARENTS: Array<Form>; // 父表单列表
$PROJECT: ProjectEntity; // 项目信息
$RELATED_FORMS: Array<Form>; // 关联表单列表
$STATUS: Record<string, any>; // 流程状态信息
$STEP_FORM_FIELD: Record<string, any>; // 步骤表单字段值映射
$STEP_FORM_FIELD_2_VALUE: Record<string, { // 步骤表单字段值和类型映射
value: any;
type: string;
}>;
$STEP_FORM_RULE: Record<string, FormRule>; // 步骤表单规则映射
$USER_INFO: UserInfo; // 用户信息
$_: typeof lodash; // Lodash工具库
// 模型操作
model(name: string): Model; // 获取指定模型实例
$model(name: string): Model; // 获取指定模型实例(同model)
// 搜索操作
$search(reportEsQuery: object): Promise<SearchResult>; // 执行ES搜索查询
// 服务操作
$service(name: string): Service; // 获取服务实例
// 工具库
$moment: typeof moment; // moment日期处理库
$lodash: typeof lodash; // lodash工具库
// 数据转换工具
// Field转换
$transformField2Value(values: Array<{field: string; value: any}>): Record<string, any>;
$transformField2Rule(rule: Array<{field: string; rule: any}>, flat?: boolean): Record<string, any>;
// Title转换
$transformTitle2Value(values: Array<{title: string; value: any}>): Record<string, any>;
$transformTitle2Rule(rule: Array<{title: string; rule: any}>, flat?: boolean): Record<string, any>;
// Key转换
$transformKey2Value(values: Array<{key: string; value: any}>): Record<string, any>;
$transformKey2Rule(rule: Array<{key: string; rule: any}>, flat?: boolean): Record<string, any>;
// 订阅相关
$subscribe(table: string, id: number, option?: ResetProjectStepOwnerOption): Promise<void>; // 订阅指定表的指定记录, 只在当前环节负责人分配脚本可用, 对应记录有变更操作时将会重新执行当前环节负责人分配脚本重新分配环节负责人
$subScribeForm(form_id: number, option?: ResetProjectStepOwnerOption): Promise<void>; // 订阅指定表单的记录, 只在当前环节负责人分配脚本可用, 对应记录有变更操作时将会重新执行当前环节负责人分配脚本重新分配环节负责人
// // 用于识别是否由订阅事件触发的脚本,可以依据此标识避免一些函数副作用
// trigger_by_subscription?: boolean;
}
/**
* 环节流转前处理脚本上下文
* 用于环节流转前运行生命周期钩子脚本,可用于修改提交数据、请求其他接口、校验等操作
*/
interface BeforeNextStepContext {
// 基础信息
action: string; // 当前操作类型:'approve'(通过) | 'refuse'(拒绝) | 'accept'(接受) 等
step_id: number; // 当前环节ID
payload: Record<string, any>; // 用户提交的数据
userInfo: UserEntity; // 当前操作用户信息
// 流程相关
flow: FlowEntity; // 完整的流程配置信息
project: ProjectEntity; // 项目数据
projectForm: FormEntity; // 项目主表单数据
currentStep: StepEntity; // 当前环节数据
currentStepForm: FormEntity; // 当前环节表单数据
curStepConfig: FlowNode; // 当前环节在流程中的配置
// 工具方法
$moment: typeof moment; // moment 日期处理库
$service(name: string): Service; // 获取服务实例
$model(name: string): Model; // 获取模型实例
/**
* 设置环节表单数据
* 注意:必须通过此方法修改表单,不能直接修改 payload.step_form
* @param obj 表单数据对象,支持 key_to_value、field_to_value、title_to_value 等映射方式
*/
$setForm(obj: {
key_to_value?: Record<string, any>; // 通过字段 key 设置值
field_to_value?: Record<string, any>; // 通过字段 field 设置值
title_to_value?: Record<string, any>; // 通过字段 title 设置值
}): void;
// API 代理(由 ApiProxyService 注入)
// 可以通过 ctx.$api 调用配置的 API 代理
/**
* 当前流转逻辑触发后刷新数据集的模式,默认为异步刷新(流转完成第一时间查询数据集数据可能是旧的,改为wait_for可以等待数据集刷新完毕后动作才结束)
* @param refreshType 刷新类型,'wait_for' 等待刷新完成 | boolean 是否刷新, 默认 false
*/
$setRefreshType(refreshType: 'wait_for' | boolean): void;
}
interface ResetProjectStepOwnerOption {
/** 是否全匹配, 为true 时删除掉老负责人数据中在新配置中不存在的人 */
full_match?: boolean;
/** 变更原因 */
reason?: string;
/** 操作批次,修改多个项目多个环节负责人可以共享一个批次 */
batch_id?: string;
/** 操作人id */
user_id?: number;
/** 是否对被修改的正在进行中的环节相关负责人发送通知 */
send_message?: boolean;
}