⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topflowevent.js

📁 CommitFlow,很不错的在线流程设计源码,供大家学习参考
💻 JS
📖 第 1 页 / 共 4 页
字号:
/*--------------------------------------------------|
| 本作品取得原作者授权修改自 support@tops.com.cn    |
| 的作品topflow                                     |
|                                                   |
| 本文件是TopFlow的核心文件,定义了各种类用到的     |
| 事件以及处理方法                                  |
|                                                   |
| 版权归上海雪线信息技术有限公司所有,              |
| 技术支持:sales@shcommit.com (仅对付费用户)     |
| 网    站:www.shcommit.com                        |
|                                                   |
| 请勿私自拷贝、修改或用于商业用途                  |
| 敬请保留本注释.                                   |
|                                                   |
| Updated: 20070613                                 |
|--------------------------------------------------*/

//global variable

var _FLOW = new TTopFlow("");
var _TOOLTYPE = "point";
var _CURRENTX = _CURRENTY = 0;
var _FOCUSTEDOBJ = null;
var _ZOOM = 1;

var _MOVEOBJ = null;
var _MOVETYPE = "";
var _DOLOG = [];
var _DOLOGINDEX = -1;
var _strPt1 = "";
var _strPt2 = "";
var _strSltPt = "";
var _strLine1 = "";
var _strLine2 = "";
var _strSltLine = "";
var _PointOrLine;
var isSelectPoint = 0;
var isSelectLine=0;
var _clkPx = 0;
var _clkPy = 0;
var ptMoveType = "";
var oOval = null;
var _logMoveType = "";
var _MOVELINEOBJ = null;
//选中流程图元素对象,显示选中效果 

function objFocusedOn(objId)
{
	//清除原来选中的对象
	objFocusedOff();
	_FOCUSTEDOBJ = document.getElementById(objId);
	if(_FOCUSTEDOBJ != null) 
	{
		
		var x = (event.x + document.body.scrollLeft) / _ZOOM;
		var y = (event.y + document.body.scrollTop) / _ZOOM;
		_FOCUSTEDOBJ.StrokeColor = _FOCUSTEDOBJ.fsc;
		
		_MOVEOBJ = document.getElementById(objId);
		_clkPx = x/4*3+"pt";
		_clkPy = y/4*3+"pt";
		if(_FOCUSTEDOBJ.tagName=="PolyLine")
		{
			_MOVELINEOBJ = new TStep(_FLOW);
			_MOVELINEOBJ.clone(_FLOW.getStepByID(objId));
			_MOVEOBJ = _FLOW.getStepByID(objId);
			var strPt =_MOVEOBJ.Points;
			var aryPt = strPt.split(',');
			var nPt=aryPt.length-1;
			_strPt2 = "";
			_strPt1 = "";
			_strLine2 = "";
			_strLine1 = "";
			for(i=0;i<=nPt;i=i+2)
			{
				var m = aryPt[i].substr(0,aryPt[i].length-2)*4/3;
				var n = aryPt[i+1].substr(0,aryPt[i+1].length-2)*4/3;
				var sqrta = Math.sqrt((x-m)*(x-m)+(y-n)*(y-n));
				if(isSelectPoint==0&&sqrta<=10)
				{
					_PointOrLine = 0;
					isSelectPoint=1;
					_MOVETYPE="line_m";			  		
					_strSltPt = aryPt[i]+',' +aryPt[i+1];
					_clkPx = aryPt[i];
					_clkPy = aryPt[i+1];
					if (i==0)ptMoveType="from";
					if (i==nPt-1)ptMoveType="to";
				}
				else
				{
					if(isSelectPoint==1)
						_strPt2 = _strPt2+','+aryPt[i]+','+aryPt[i+1];
					else
						_strPt1 = _strPt1+','+aryPt[i]+',' +aryPt[i+1];
				}

				if(i<=nPt-3)
				{
					var r = aryPt[i+2].substr(0,aryPt[i+2].length-2)*4/3;
					var s = aryPt[i+3].substr(0,aryPt[i+3].length-2)*4/3;
					
					if((Math.abs(x*(n-s)+y*(r-m)+(m*s-n*r))/Math.sqrt((n-s)*(n-s)+(r-m)*(r-m))<=5)&&(isSelectLine==0)&&sqrta>10&&isSelectPoint==0)
					{
						_PointOrLine = 1;
						_MOVETYPE="line_m";
						isSelectLine = 1;
						_strSltLine = aryPt[i]+','+aryPt[i+1]+','+aryPt[i+2]+','+aryPt[i+3];
						_clkPx = x/4*3+"pt";
						_clkPy = y/4*3+"pt";
					}
					else
					{
						if(isSelectLine==1)
						{
							if (i <= nPt-3)
							{
								_strLine2 = _strLine2+','+aryPt[i+2]+','+aryPt[i+3];
							}
						}
						else
						{
							_strLine1 = _strLine1 + "," + aryPt[i]+',' +aryPt[i+1];
						}
					}
				}
			}
			if(_strPt1!= '')
			   _strPt1 = _strPt1.substr(1)+',';
			if(_strLine1!='')
			   _strLine1 = _strLine1.substr(1)+",";
		}
	}  
	stuffProp();
}
function createOval(x,y)
{
	oOval = document.createElement("v:oval");
	oOval.style.position = "absolute";
	oOval.style.width = "6px";
	oOval.style.height="6px"
	oOval.style.left = x;
	oOval.style.top = y;
	oOval.fillcolor = "red";
	oOval.strokecolor = "red";
	document.body.appendChild(oOval);
}
//将HTML对象转换成PolyLine实例
function toPolyLineObj(objTemp)
{
	var objLine = _FLOW.getStepByID(objTemp.id);
	return objLine;
}
//更新数据表
function updateFlow(htmlObj){

}

//放弃选择流程图元素对象,显示未选中效果
function objFocusedOff(){
  if(_FOCUSTEDOBJ != null) 
  {
	  _FOCUSTEDOBJ.StrokeColor = _FOCUSTEDOBJ.sc; //恢复原来的颜色
  }
  _FOCUSTEDOBJ = null;
  isSelectPoint = 0;
  isSelectLine = 0;
  ptMoveType = "";
  oOval = null;
  return;
}

//删除流程图元素对象
function deleteObj(ObjId){
  var obj = document.getElementById(ObjId);
  if(obj == null) return false;
  if(obj.typ != "Proc" && obj.typ != "Step") return false;
  if(obj.typ == "Proc" && (obj.st == "BeginProc" || obj.st == "EndProc")){
    alert("不能删除!一个流程图中,开始与结束结点是必需的");
    return false;
  }
  if(confirm("确定要删除[" +obj.title + "]吗?")){
    objFocusedOff();
    if(obj.typ == "Proc"){
      var Proc = _FLOW.getProcByID(ObjId);
      _FLOW.deleteProcByID(ObjId);
      pushLog("delproc", Proc);
    }
    else{
      var Step = _FLOW.getStepByID(ObjId);
      _FLOW.deleteStepByID(ObjId);
      pushLog("delstep", Step);
    }
    _FLOW.Modified = true;
    DrawAll();
  }
}

//更改[任务]的ID值,将原路径重新指定到新ID
function changeProcID(OldID, NewID){
  var Step;
  for(var i = 0; i< _FLOW.Steps.length; i++){
    Step = _FLOW.Steps[i];
    if(Step.FromProc == OldID) Step.FromProc = NewID;
    if(Step.ToProc == OldID) Step.ToProc = NewID;
  }
}
function saveStepsToProc(obj)
{
	for(var i = 0; i < _FLOW.Steps.length; i++){
		var oStep = _FLOW.Steps[i];
		if(oStep.FromProc == obj.id || oStep.ToProc == obj.id){
			updateFlow(document.getElementById(oStep.ID));					
		}
	}
}
//更改Proc的位置
function changeProcPos(obj){
  for(var i = 0; i < _FLOW.Steps.length; i++){
    Step = _FLOW.Steps[i];
    if(Step.FromProc == obj.id || Step.ToProc == obj.id){
      objStepHTML = document.getElementById(Step.ID);
      if(Step.ShapeType == "Line"){
        Step.getPath();
        objStepHTML.from = Step.FromPoint;
        objStepHTML.to = Step.ToPoint;
      }
      else if(Step.ShapeType == "PolyLine"){
		var strPt="";
		var arrPt = Step.Points.split(",");
		var objWidth = obj.style.width;
		var objHeight = obj.style.height;
		var objX = obj.style.left;
		var objY = obj.style.top;
		var strMoveType = _MOVETYPE;
		
		objWidth = objWidth.substr(0,objWidth.length-2);
		objHeight = objHeight.substr(0,objHeight.length-2);
		objX = objX.substr(0,objX.length-2)*1;
		objY = objY.substr(0,objY.length-2)*1;
		
		if (_MOVETYPE=="")strMoveType = _logMoveType;
		switch(strMoveType){
			case "proc_sm":
			case "proc_m":
			case "proc_e":
			case "proc_n":
			case "proc_snw":
			case "proc_nw":
				if (Step.FromProc == obj.id)
				{
					strPt = (objX+objWidth*Step.fromRelX)*3/4+"pt,"+(objY+objHeight*Step.fromRelY)*3/4+"pt"
					for (var j=2; j<arrPt.length; j++)
					{
						strPt = strPt + "," + arrPt[j]
					}
				}
				if (Step.ToProc == obj.id)
				{
					for (var j=0; j<arrPt.length-2; j++)
					{
						strPt = strPt + arrPt[j] + ","
					}
					strPt = strPt + (objX+objWidth*Step.toRelX)*3/4+"pt,"+(objY+objHeight*Step.toRelY)*3/4+"pt"
				}
				Step.Points = strPt;
				break;
			default :
		}
		objStepHTML.outerHTML = Step.toString();
      }
    }
  }
  _logMoveType = "";
}

//修改[任务]
function editProc(objId){
 /* var oldobj = new TProc(_FLOW), newobj = new TProc(_FLOW);
  var proc = _FLOW.getProcByID(objId);
  oldobj.clone(proc);
  var oldID = proc.ID;
  if(vmlOpenWin("proc.htm", proc, 450,350)){
    if(oldID != proc.ID) changeProcID(oldID, proc.ID);
    DrawAll();
    newobj.clone(proc);
    pushLog("editproc", {"_old":oldobj,"_new":newobj});
    _FLOW.Modified = true;
    objFocusedOn(proc.ID);
  }*/
}

//修改[路径]
function editStep(objId){
  var oldobj = new TStep(_FLOW), newobj = new TStep(_FLOW);
  var step = _FLOW.getStepByID(objId);
  oldobj.clone(step);
  /*if(vmlOpenWin("step.htm", step, 450,350)){
    _FLOW.Modified = true;
    DrawAll();
    objFocusedOn(step.ID);
    newobj.clone(step);
    pushLog("editstep", {"_old":oldobj,"_new":newobj});
  }*/
  var x = (event.x + document.body.scrollLeft) / _ZOOM;
  var y = (event.y + document.body.scrollTop) / _ZOOM;
  var strPt = step.Points;
  var aryPt = strPt.split(',');
  var nPt = aryPt.length-1;
  isSelectPoint = 0;
      _strPt2 = "";
      _strPt1 = "";
	  for(i=0;i<=nPt;i=i+2){
		var m = aryPt[i].substr(0,aryPt[i].length-2)*1.333;
	    var n = aryPt[i+1].substr(0,aryPt[i+1].length-2)*1.333;
	  	var sqrta = Math.sqrt((x-m)*(x-m)+(y-n)*(y-n));
			if(isSelectPoint==0&&sqrta<=10){
			  _strSltPt = aryPt[i]+',' +aryPt[i+1];
			}
			else if(isSelectPoint==1){
				    _strPt2 = _strPt2+','+aryPt[i]+','+aryPt[i+1];
			}
			     else{
				    _strPt1 = _strPt1+','+aryPt[i]+',' +aryPt[i+1];
			}
      }    
      if(_strPt1!= ''){
	     _strPt1 = _strPt1.substr(1);
      }
  step.Points = _strPt1+_strPt2;
  updateFlow(document.getElementById(step.ID));
  document.getElementById(step.ID).outerHTML=step.toString();
  stuffProp();
  _FLOW.Modified = true;
}

//需要特点检查的属性
function beforePropChange(oItem){
  if("rule" in oItem){
    r = new RegExp(oItem.rule);
    if(!r.test(oItem.value)){
      alert(oItem.msg);
      oItem.focus();
      if(oItem.tagName.toLowerCase() == "input") oItem.select();
      return false;
    }
  }
  return true;
}

function setPropID(oItem){
  var obj = null,obj2 = null;
  obj = _FOCUSTEDOBJ.typ == "Proc"?_FLOW.getProcByID(_FOCUSTEDOBJ.id):_FLOW.getStepByID(_FOCUSTEDOBJ.id);
  var oldID = obj.ID;
  if(oldID == oItem.value) return;
  obj2 = _FLOW.getProcByID(oItem.value);
  if(obj2 == null) obj2 = _FLOW.getStepByID(oItem.value);
  if(obj2 != null){
    alert("编号[" + oItem.value +"-" + obj2.Text + "]已经存在!请重新输入!");
    oItem.focus();
    oItem.select();
    return;
  }
  document.all(_FOCUSTEDOBJ.id + "Text").id = oItem.value + "Text";
  obj.ID = oItem.value;
  _FOCUSTEDOBJ.id = oItem.value;
  if(_FOCUSTEDOBJ.typ == "Proc") changeProcID(oldID, obj.ID);
  pushLog("editprop",{"obj":obj,"prop":"ID","_old":oldID,"_new":obj.ID});
}

//修改名称
function setPropText(oItem){
  var obj = _FOCUSTEDOBJ.typ == "Proc"?_FLOW.getProcByID(_FOCUSTEDOBJ.id):_FLOW.getStepByID(_FOCUSTEDOBJ.id);
  if(obj.Text == oItem.value) return;
  var oldValue = obj.Text;
  obj.Text = oItem.value;
  //if(obj.ObjType == "Proc")DrawAll();
  DrawAll();
  //else
  //  DrawTree();
  objFocusedOn(obj.ID);
  pushLog("editprop",{"obj":obj,"prop":"Text","_old":oldValue,"_new":obj.Text});
}

//修改活动类型
function setActFlag(oItem){
  var obj = _FOCUSTEDOBJ.typ == "Proc"?_FLOW.getProcByID(_FOCUSTEDOBJ.id):_FLOW.getStepByID(_FOCUSTEDOBJ.id);
  if(obj.actFlag == oItem.value) return;
  var oldValue = obj.actFlag;
  if (oItem.value == "1013")
  {
	 var Porc
	  for(var i = 0; i< _FLOW.Procs.length; i ++){
		Proc = _FLOW.Procs[i];
		if (Proc.actFlag.substr(0,4)=="1013")
		{
			alert("一个流程里面不允许存在2个开始活动");
			return false;
		}
	  }
  }
  if (oItem.value == "2013")
  {
	 var Porc
	  for(var i = 0; i< _FLOW.Procs.length; i ++){
		Proc = _FLOW.Procs[i];
		if (Proc.actFlag.substr(0,4)=="2013")
		{
			alert("一个流程里面不允许存在2个结束活动");
			return false;
		}
	  }
  }
  obj.actFlag = oItem.value + '' + obj.actFlag.substr(4,4);
  if (oldValue.substr(0,4)=="1013" && oItem.value != "1013")
  {
	  _FLOW.deleteStepByID(_FLOW.ID);
	  DrawVML();
  }
  if (oItem.value == "2013")
  {
	  obj.ProcType = "EndProc";
	  obj.ShapeType = "Oval";
	  obj.Width = "40";
	  obj.Height = "40";
	  DrawVML();
  }
  else if (oItem.value == "1013")
  {
	  Step = new TStep(_FLOW);
	  Step.FromProc = "begin";
	  Step.Text = "流程开始";
	  Step.ID = _FLOW.ID;
	  Step.ToProc = obj.ID;
	  Step.zIndex = 2;
	  Step.ShapeType = "PolyLine";
	  _FLOW.addStep(Step);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -