控制表单页上的按钮和表单项
示例源码
添加控制表单页上的按钮和表单项
的扩展,一般分成两步:
- 创建权限扩展文件
- 注册权限扩展文件
创建权限扩展文件
首先在src/plugins/detail-page-extends
文件夹下创建helloPermissionExtends
文件。通过permission
钩子注册监听事件,判断当前节点如果是中心文秘
,则退回
按钮可见。
src/plugins/detail-page-extends/helloPermission.ts
import AppSetting from "@sinoform/app-setting";
AppSetting.hooks.detailPage.tap(
"helloPermissionExtends",
(detailPageContext) => {
const { hooks, formData } = detailPageContext;
const { formDesign: { id } = {}, flowNode } = formData;
// 判断是否为指定的表单id
if (id === "612df55ac9327f1383eb4bbb") {
// 在产生最终的表单权限时调用,用来收集自定义的权限控制数据。
hooks.permission.tap(
"helloPermissionExtends",
(_currentUser, permissionItemList) => {
//判断当前节点是否为`中心文秘`,如果是,则显示`退回`按钮
if (flowNode?.name === "中心文秘") {
permissionItemList.push({
name: "back",
hidden: false,
});
}
}
);
}
}
);
注册权限扩展文件
只需在src/index.ts
文件中引入扩展文件即可。
src/index.ts
import "./plugins/detail-page-extends/helloPermissionExtends";
示例:办结按钮显示权限
中心文秘节点配置办结
按钮,但必须在经过领导审批
后才能显示此按钮
src/plugins/detail-page-extends/customPermissionExtends.ts
import AppSetting from "@sinoform/app-setting";
AppSetting.hooks.detailPage.tap(
"customPermissionExtends",
(detailPageContext) => {
const { hooks, formData, formState } = detailPageContext;
const { formDesign: { id } = {}, flowNode, passNodes } = formData;
// 判断是否为指定的表单id
if (id === "612df55ac9327f1383eb4bbb") {
// 在产生最终的表单权限时调用,用来收集自定义的权限控制数据。
hooks.permission.tap(
"customPermissionExtends",
(currentUser, permissionItemList) => {
// 判断当前节点是否是`中心文秘`节点且流程已经流经`领导审批`节点,这里用到了节点id,由于每个节点的id都不一致,因此如果使用节点id的话,此权限判定只能对绑定的表单起作用。如果此逻辑为共用,建议使用节点名称匹配,即`node.name !== '领导审批'`
if (
flowNode?.name === "中心文秘" &&
passNodes?.every(
(node) => node.id !== "4e7d5e6f-5da7-4b34-a056-950939f6e557"
)
) {
permissionItemList.push({
name: "end",
hidden: true,
});
}
}
);
}
}
);
示例:控制表单字段可见且可编辑
流程 办结
之后,智能表单管理员
对表单中的用户反馈
有可见且可编辑权限
customPermissionExtends.ts
import AppSetting from "@sinoform/app-setting";
AppSetting.hooks.detailPage.tap(
"customPermissionExtends",
(detailPageContext) => {
const { hooks, formData, formState } = detailPageContext;
const { formDesign: { id } = {}, flowNode, passNodes } = formData;
// 判断是否为指定的表单id
if (id === "612df55ac9327f1383eb4bbb") {
// 在产生最终的表单权限时调用,用来收集自定义的权限控制数据。
hooks.permission.tap(
"customPermissionExtends",
(currentUser, permissionItemList) => {
// 判断是否是已办结状态,如果是并且当前登录人是`智能表单管理员`,则表单中的用户反馈字段可见
if (
formState.values?.workflowStatus === "已办结" &&
currentUser.userName === "智能表单管理员"
) {
permissionItemList.push({
name: "yonghufankui", // 用户反馈字段标识
hidden: false,
readOnly: false,
});
}
}
);
}
}
);