最后在做一个五金厂的报价系统,开始准备自已做,做着做着发现真的不是那么简单,报价界面有100多个栏位,有N多个公式,12个工序动态指定,然后带出对应的设备,表单还要经过五个部门协同操作,每一步骤操作的栏位不同,如果自已开发,得要有一个完整的权限控制、工作流表单设计、工作流程设计,而且还要很灵活,用户在系统使用初期可能会有很多调整,想想都头大了,于是想到了OA2015,说干就干,搭建环境后,开工。
一、设计表单
用了整整一天的时间,那栏位多得你都想吐血,你看图就知道了!
二、开始一个一个公式设置
比如MAX,MIN,+-*/这些都可以直接用表单设计器的控件来实现了,但不支持IF呀,但自已用JS的三元表达式实现,不过要注意>符右边必须有一个空格,不然字符会被截断;
JS中用到了大量的jQuery的事件绑定,还好有这个东东,不然JS代码都会写死人的,以下是一段选择工序后,自动加载工序设备的代码:
//计算工艺 自动加载设备 jQuery("input[id^='mgxcb_']").attr('readonly',true); jQuery("input[id^='mgxshcb_']").attr('readonly',true); jQuery("input[id^='gycbother_']").attr('readonly',true); jQuery("select[id^='gygx_']").bind('change propertychange',function(){ var gygx=jQuery(this).children('option:selected').val(); var idx=(jQuery(this).attr('id')).substr(-2); jQuery('#gygxsb_'+idx+' option').remove(); var sid = document.getElementById('gygxsb_'+idx); var DATA_41=YJB_Str2Num(jQuery("input[name='DATA_41']:eq(0)").val()); var shebeitype=''; switch (gygx){ case '卷制': shebeitype='juanzhishebei'; jQuery("#gxsudu_"+idx).attr('readonly',false); break; case '热处理': shebeitype='rechulishebei'; jQuery("#gxsudu_"+idx).attr('readonly',true); speedfromweight(DATA_41,'0',"gxsudu_"+idx); break; case '喷丸': shebeitype='penwanshebei'; jQuery("#gxsudu_"+idx).attr('readonly',true); speedfromweight(DATA_41,'0',"gxsudu_"+idx); break; case '磨端面': jQuery("#gxsudu_"+idx).attr('readonly',false); jQuery("#gxsudu_"+idx).val(0); shebeitype='moduanmianshebei'; break; case '倒角': jQuery("#gxsudu_"+idx).attr('readonly',false); jQuery("#gxsudu_"+idx).val(0); shebeitype='daojiaoshebei'; break; case '立定': jQuery("#gxsudu_"+idx).attr('readonly',false); jQuery("#gxsudu_"+idx).val(0); shebeitype='lidingshebei'; break; case '清洗': jQuery("#gxsudu_"+idx).attr('readonly',true); speedfromweight(DATA_41,'qx',"gxsudu_"+idx); shebeitype='qingxishebei'; break; case '手工': jQuery("#gxsudu_"+idx).attr('readonly',false); jQuery("#gxsudu_"+idx).val(0); shebeitype='shougongshebei'; break; default: jQuery("#gxsudu_"+idx).attr('readonly',false); jQuery("#gxsudu_"+idx).val(0); break; } jQuery.post('/userext/index.php?c=workflow&m=getgxsb', {tbname:shebeitype}, function(res){ jQuery.each(res.resmsg,function(idx,val){ sid.options[sid.options.length]=new Option(val,val); }); },'json' ); }); //工序设备变化更新速度、工序成本、工序损耗成本,折旧成本 jQuery("input[name='DATA_41']").bind('input change',function(){ var gygxlist=jQuery("select[id^='gygx_']"); var DATA_41=YJB_Str2Num(jQuery("input[name='DATA_41']:eq(0)").val()); jQuery.each(gygxlist,function(idx,obj){ gygx=jQuery(obj).children('option:selected').val(); id=(jQuery(obj).attr('id')).substr(-2); switch (gygx){ case '热处理': case '喷丸': speedfromweight(DATA_41,'0',"gxsudu_"+id); break; case '清洗': speedfromweight(DATA_41,'qx',"gxsudu_"+id); break; default : jQuery("#gxsudu_"+id).val(0); break; } }); });
以上代码调用到了一个函数,函数的是用来从后台取要加载的数据:
/* 通过重量获取速度 */ function speedfromweight(weight,gxtype,id){ jQuery.ajax({type:'POST', url:'/userext/index.php?c=workflow&m=speedfromweight', data:{weight:weight,gxtype:gxtype}, success:function(res){ if (res.rescode!=0){ alert(res.resmsg); return false; } jQuery("#"+id).val(res.resmsg); }, dataType:'json', async:false,cache:false} ); }
加载数据后台代码是php实现的,写了一个最简易的MVC模式的入口文件,所有的方法都从这个文件入口调用:
include_once('inc/auth.inc.php'); $ControllerPath='Controller/'.$_GET['c'].'Controller.php'; $ControllerName=$_GET['c'].'Controller'; $method=$_GET['m']; if (!file_exists($ControllerPath)){ echo json_encode(array('rescode'=>1,'resmsg'=>'Controller '.$_GET['c'].' is not exists!')); exit(0); } require($ControllerPath); $ctl=new $ControllerName; $ctl->$method();
入口文件负责控制器和方法的解析,控制器才是方法实现的主体:
/* 功能:工作流控制器 */ class workflowController{ //获取工序设备列表 public function getgxsb(){ $tbname='data_'.$_POST["tbname"]; $this->returnajax(0,$this->getparalist($tbname)); } //获取参数列表数组 public function getparalist($table){ $query = "select cName from ".$table." order by ds_key_id"; $cursor=exequery(TD::conn(),$query); $list=array(); while($ROW=MySQL_fetch_array($cursor)){ array_push($list,iconv("GBK", "UTF-8", $ROW["cName"])); } return $list; } //通过重量取速度 public function speedfromweight(){ $weight=$_POST["weight"]; $type=$_POST["gxtype"]; $query="select max(speed) speed from ( select cast(weight as DECIMAL(18,1)) weight,cast(speed as DECIMAL(18,1)) as speed from data_".($type=='qx'?'qx':'')."weightspeedcompare ) as bb where ".$weight."<".($type=='qx'?'':'=')."weight"; $cursor=exequery(TD::conn(),$query); while($ROW=MySQL_fetch_array($cursor)){ $speed=$ROW["speed"]; } mysql_free_result($cursor); $this->returnajax(0,$speed); } //返回JSON字符串 private function returnajax($code,$str){ echo json_encode(array('rescode'=>$code,'resmsg'=>$str)); } }
这个项目还好有OA系统这个平台,不然真自已做起来不简单,开发周期太长,用这个平台,只要把时间用在业务逻辑的处理上,同时也给了我一个新的想法,以后开发的项目若是要走审批流程的,都可以利用这个平台来做!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-18 12:37:16