业务场景:近日在实施一项目
1、差旅费用报销允许代报,就需要 表单上的报销人可以选择,申请人固定
2、关键业务人员提出 差旅费用报销必须关联 对应差旅申请流程
3、总经理秘书提出 当 报销人为 总经理时,不需要对应差旅申请流程,因为总经理本人不会发起差旅申请
本业务场景的实现是在目前所在OA厂商的ecology平台中实现
JS代码如下
//对应字段ID复制
var field_a = "field6030";
var field_b = "field6078";
var btzd = "";
//必填时的图标
var textValue = "<img align='absmiddle' src='/images/BacoError_wev8.gif'>" ;
//设置定时器1.8S执行一次
var id=window.setInterval("linkageMust()",1800);
//具体执行的函数
function linkageMust(){
var bdzdbt="";
//获取表单中某一隐藏字段的值,此字段用来存放总经理的ID
var ceoid=jQuery("#field6305").val();
//获取目前表单中提交时会检查必填的字段字符串
btzd = jQuery("input[name='needcheck']").val();
//判断 需要设置必填或者不必填的字段 是否在 必填字符串中
var tag=btzd.indexOf(field_b);
//获取 报销人的ID
var a_v = jQuery("#"+field_a).val();
var fieldIds = "" ;
//当报销人的ID等于CEO的ID,同时对应差旅关联流程字段是必填字段,则调整为非必填
if(a_v == ceoid&&tag!=-1){
//将对应出差流程相关字段中的内容清空即必填提示图片清空
jQuery("#"+field_b+ "span").html('');
jQuery("#"+field_b+ "spanimg").html('');
//设置字段目前的属性为非必填
jQuery("#"+field_b).attr('viewtype','0');
//将目前表单中的必填字符串分割成为数组
var array=btzd.split(",");
var length=array.length;
for(var i=0;i<length;i++)
{
//剔除数组中对应 差旅流程字段的元素,重组必填字段字符串
if(array[i]!=field_b&&array[i]!=''){
bdzdbt=bdzdbt+","+array[i];
}
}
//将重组的不包含 关联差旅流程字段 的 必填字段字符串赋值给 平台表单中的必填字符串
jQuery("input[name='needcheck']").val(bdzdbt);
//最终达到了从去除必填样式 到 去除 必填校验的效果
}
//当报销人的ID不等于CEO的ID,同时对应差旅关联流程字段目前不是必填,则调整为必填
else if(a_v != ceoid&&tag==-1){
//加必填样式效果
jQuery("#"+field_b+ "spanimg").html(textValue);
jQuery("#"+field_b).attr('viewtype','1');
//将 差旅字段 添加到 平台表单内中的必填字符串
fieldIds = btzd + "," + field_b ;
jQuery( "input[name='needcheck']").val(fieldIds);
//最终达到了 添加必填样式 添加必填项检验的效果
}
}
//本段脚本可以让申请人来回选择报销人员,系统会根据报销人实时判断需要是否必填并做出响应;同时优化了代码结构,避免了不必要的变量存储和系统运算
上述代码另存为 Travel_input.js文件,在表单中引入
<!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式。 -->
<script language="javascript" type="text/javascript" src="/js/Travel_input.js"></script>