📄 topflowevent.js
字号:
/*--------------------------------------------------|
| 本作品取得原作者授权修改自 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 + -