如何在OA系统上搭建一个报价系统

最后在做一个五金厂的报价系统,开始准备自已做,做着做着发现真的不是那么简单,报价界面有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

如何在OA系统上搭建一个报价系统的相关文章

关于在VC上搭建一个整体系统和应用的过程和心得

因业务需求,需要登录Logbase运维安全系统,通过vmvare vSphere client搭建系统及应用. 1.首先登录Logbase运维安全系统,进入后可选择某个设备进入VC界面,进入时需要该浏览器支持JAVA,如若不支持,可相应的下载一个. 2. 在经过一系列的点击忽略之后,进入到VC界面 挂载好操作系统镜像后,启动虚拟机,然后在控制台处即可看到安装redhat系统的界面,控制台可由右侧上方按钮处点击进入,也可在左侧选择想要的服务器右键选择打开控制台进入,redhat的安装不在此叙述,很

如何在github上搭建一个免费的 无限流量的静态网页博客Github pages

前言: 看到很多相关的教程,但是在实际操作的时候还是遇见了不少问题,这里记录分享一下我的操作流程.免费空间用过很多,博客也用过一些,听说了github后就想试着玩一下这个静态库,感觉挺不错的,操作也比较简单,可以放些demo觉得挺不错的,看自己的喜好来搭建吧~本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com) 1.注册github.com账户,具体操作不描述了,英文如果不是很好可以使用翻译软件 2.新开一个一个仓库(N

使用monit搭建一个监控系统

上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知道,平时可从web UI上看到整个系统的状况,同时它本身要轻量级,不要影响性能.当然了类似的产品很多了,比如Ganglia,我在老科长波哥曾经搭建过一个Ganglia系统监控科室十几台服务器,让我很是崇拜.本文重点介绍monit.                      monit是一个可以监控系

用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(下)-搭建Hadoop集群

上篇:用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker 上篇介绍了快速上手Docker部分,下面接着介绍搭建Hadoop集群部分. 六.搭建Hadoop伪分布模式 我们先用前面创建的这个容器来搭建Hadoop伪分布模式做测试,测试成功后再搭建完全分布式集群. 1.SSH这个centos容器可以看做是一个非常精简的系统,很多功能没有,需要自己安装.Hadoop需要SSH,但容器没有自带,需要我们安装.①安装SSH # yum -y ins

超强教程:如何搭建一个 iOS 系统的视频直播 App?

现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优化界面等难题,具备一定的难度与挑战! 那假如自己搭建一个直播平台,该如何下手呢?莫慌,本文就给大家详细介绍如何搭建一个 iOS 系统的直播 App? 1 流程熟悉 1.1 选择协议 想要实现直播 App ,我们得先知道如何播放从服务器传来的视频数据. 目前,主流视频直播网站使用的协议多为 RTMP(

在阿里云上搭建一个简单的node服务器

一.阿里云服务器以及node环境的搭建 服务器可以去阿里云官网购买一个ECS云服务器,价格还是有点小贵的,如果想使用免费的阿里云服务器,那么阿里云官网每天也是有抢免费的服务器的,每天上午十点,新人能抢到为期半年的服务器. 然后有了服务器以后,首先搭建一个node的运行环境,保证node 能正常使用,这个不是本文的内容就不多加赘述了. 如果没有搭建的小伙伴可以参考这里. 二.远程服务器上的代码管理 在阿里云服务器上可以安装一个 git 版本控制器,将自己的代码放置在自己的 GitHub 上,然后在

liunx系统上搭建samba服务,实现局域网文件共享

实验项目:搭建samba服务,实现三个功能:1,匿名访问:2,身份验证访问:3,账号映射访问.我们用两台虚拟机作为实验对象;一台Windows7系统的客户机,一台redhat6系统提供samba服务.两台实验对象都使用同一个虚拟网卡,并能够相互ping通1,匿名访问首先在redhat6系统的虚拟机上搭建samba服务,挂载光盘到/mnt目录,安装samba软件包然后进入/etc/samba/目录找到samba配置文件,备份配置文件,并过滤掉"#"开头的注释行,进入配置文件进行编辑设定设

在CentOS 7系统上搭建LNMP

简要介绍: 一般来说,LNMP是Linux+Nginx+MySQL+PHP的简称,是一种用于替代LAMP的解决方案.在本文档中,我使用CentOS 7来搭建LNMP平台,其中,PHP采用FastCGIserver方式部署.此外,还介绍了如何部署Memcached和phpMyadmin. CentOS系统安装时选择的是basic server版本,详细版本号为CentOS 7.0.1406,核心版本号为3.10.0-123.el7.x86_64.系统安装在虚拟机上,IP为172.31.2.3,其可

在Ubuntu系统上搭建Hadoop 2.x(2.6.2)

官方的中文版的Hadoop快速入门教程已经是很老的版本了,新版的Hadoop目录结构发生了变化,因此一些配置文件的位置也略微调整了,例如新版的hadoop中找不到快速入门中提到的conf目录,另外,网上有很多教程也是关于老版本的.本教程主要是针对Hadoop 2.X版本,在Ubuntu系统上的搭建过程.如果要对各个步骤进行深入理解,还需要参考其他资料. 英文版快速入门:http://hadoop.apache.org/docs/r2.6.2/hadoop-project-dist/hadoop-