我新建了一个测试流程,并且希望在这个节点模板中编写一些js代码
这里是这个节点和流程的id
我在ecode中新建了这样一个应用,设置regist.js文件为前置加载,并在其中指定了对应的workflowID和nodeID
然后,我在index.js中编写了一小段测试代码
然后发布了应用
前端刷新该节点页面,代码并没有生效,F12中也没有对应的报错
register.js代码如图
let isRun = false; //控制执行次数
const config = ecodeSDK.getCom('${appId}','config');
let lockBtn = false;
let didLoadJs = false;
const runScript = ()=>{ //代码块钩子,类似放在代码块中或者jquery.ready
//可操作WfForm,以及部分表单dom hiden、ReactDOM.render
//console.log('runScript!');
ecodeSDK.load({
id:'${appId}',
noCss: true,
cb:()=>{
lockBtn = false;
didLoadJs = true;
// console.log('加载成功');
}
});
isRun = true; //确保只执行一次
}
//PC端代码块
//利用组件复写作为代码块执行钩子,这种方案可以支持覆盖到所有流程,也可以判断到指定流程指定节点
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop',{
fn:(newProps)=>{
if(!config.enable) return ; //开关打开
const {hash} = window.location;
if(!hash.startsWith('#/main/workflow/req')) return ; //判断页面地址
if (!didLoadJs) lockBtn = true; // 锁定按钮,避免没有拦截到用户提交动作(针对注册钩子事件,例如WfForm.registerAction)
if(!ecCom.WeaTools.Base64) return ; //完整组件库加载完成
if(!WfForm) return ; //表单sdk加载完成
const baseInfo = WfForm.getBaseInfo();
const {workflowid,nodeid} = baseInfo;
if(workflowid!==636 || nodeid !== 4646)return;
if (config.enableUuid && window.uuIdEcode && config.uuIds) {
// window.uuIdEcode 插入代码块中写入的唯一值
if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
} else if(!config.base[workflowid]) return;
if(isRun) return ; //执行过一次就不执行
runScript(); //执行代码块
}
});
// 锁定按钮
ecodeSDK.overwritePropsFnQueueMapSet('Button', {
fn: (newProps) => {
if(!config.enable) return ; //开关打开
const {hash} = window.location;
if(!hash.startsWith('#/main/workflow/req')) return ; //判断页面地址
if(!ecCom.WeaTools.Base64) return ; //完整组件库加载完成
if(!WfForm) return ; //表单sdk加载完成
const baseInfo = WfForm.getBaseInfo();
const {workflowid,nodeid} = baseInfo;
if(workflowid!==636 || nodeid !== 4646)return;
if (config.enableUuid && window.uuIdEcode && config.uuIds) {
// window.uuIdEcode 插入代码块中写入的唯一值
if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
} else if(!config.base[workflowid]) return;
const oldClick = newProps.onClick;
newProps.onClick = (e) => {
if (!lockBtn) {
oldClick(e);
} else {
// console.log('锁定');
}
}
}
})
//移动端触发代码块,由于移动端代码块使用的组件和PC端代码块不同,所以此方法可以建一个独立项目(橙色)
ecodeSDK.overwriteMobilePropsFnQueueMapSet('TabPage',{
fn:(newProps)=>{
if(!config.enable) return ; //开关打开
const {hash} = window.location;
if(!hash.startsWith('#/req')) return ; //判断页面地址
if(!WfForm) return ; //表单sdk加载完成
const baseInfo = WfForm.getBaseInfo();
if(!baseInfo) return ;
const {workflowid,nodeid} = baseInfo;
if(workflowid!==636 || nodeid !== 4646)return;
if (config.enableUuid && window.uuIdEcode && config.uuIds) {
// window.uuIdEcode 插入代码块中写入的唯一值
if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
} else if(!config.base[workflowid]) return;
if(isRun) return ; //执行过一次就不执行
runScript(); //执行代码块
}
});
index.js代码如下:
jQuery(document).ready(function(){
alert("nihao !");
})