到目前流程设计器流程结点的拖拽操作已基本完成,接下来就到结点的属性开发了。前面已经开发过流程模板的属性了,结点属性跟模板属性类似,从属性模板定义copy一份,然后按各结点类型进行调整就ok。
1、先来回顾下流程模板属性,这里对流程模板属性稍微进行了调整,效果图如下:
1//定义流程模板属性2TemplatePRoperty =function() {3if(typeofTemplateProperty.defaults == "undefined") {4/*第一次定义对象时为TemplateProperty类定义静态属性*/5TemplateProperty.defaults ={6data: {7RecNo: 0,8OrgNo: 0,9TemplateCode: "",10TemplateName: "",11InstanceName: "",12DesignWidth: 1000,13DesignHeight: 800,14Version: 0,15VerStatus: "设计",16DesignerName: "",17DesignTime: "",18PublisherName: "",19PublishTime: "",20TemplateMemo: ""21}22};23/*第一次定义对象时定义实例共有方法*/24varp =TemplateProperty.prototype;25p.createTable =function() {26this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0'></table>");27this.$tbody = $("<tbody></tbody>");28this.$table.append(this.$tbody);29this.$propertyDiv.append(this.$table);30//行0 - 基本属性(分组)31this.$tbody.append(GoFlow.formatString(32"<tr style='display:table-row;background-color:rgb(234, 229, 229);height:0px;' group='TemplateBasic'>{0}</tr>",33"<td class='Expanded' group='TemplateBasic'></td><td style='width: 100%;height:0px;' colspan='3'>基本属性</td>"));34//行1 - 流程编码35this.$tbody.append(GoFlow.formatString(36"<tr group='TemplateBasic' property='TemplateCode'><td/><td>流程编码</td>{0}</tr>",37"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));38//行2 - 流程名称39this.$tbody.append(GoFlow.formatString(40"<tr group='TemplateBasic' property='TemplateName'><td/><td>流程名称</td>{0}</tr>",41"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));42//行3 - 实例名称43this.$tbody.append(GoFlow.formatString(44"<tr group='TemplateBasic' property='InstanceName'><td/><td>实例名称</td>{0}{1}</tr>",45"<td><input id='InstanceName' style='width:98.9%;' type='text' maxlength='50'/></td>",46"<td style='min-width:35px;'><input class='BizData' type='button' value='...'/></td>"));4748//行4 - 版本信息(分组)49this.$tbody.append(GoFlow.formatString(50"<tr style='display:table-row;background-color:rgb(234, 229, 229);height:0px;' group='TemplateVersion'>{0}</tr>",51"<td class='Expanded' group='TemplateVersion'></td><td style='width: 100%;height:0px;' colspan='3'>版本信息</td>"));52//行5 - 流程版本53this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='Version'>{0}</tr>",54"<td/><td>流程版本</td><td colspan='2' readonly='true'><div></div></td>"));55//行6 - 版本状态56this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='VerStatus'>{0}</tr>",57"<td/><td>版本状态</td><td colspan='2' readonly='true'><div></div></td>"));58//行7 - 修改人59this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='DesignerName'>{0}</tr>",60"<td/><td>修改人</td><td colspan='2' readonly='true'><div></div></td>"));61//行8 - 修改时间62this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='DesignTime'>{0}</tr>",63"<td/><td>修改时间</td><td colspan='2' readonly='true'><div></div></td>"));64//行9 - 发布人65this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='PublisherName'>{0}</tr>",66"<td/><td>发布人</td><td colspan='2' readonly='true'><div></div></td>"));67//行10 - 发布时间68this.$tbody.append(GoFlow.formatString("<tr group='TemplateVersion' property='PublishTime'>{0}</tr>",69"<td/><td>发布时间</td><td colspan='2' readonly='true'><div></div></td>"));70//行11 - 其他设置(分组)71this.$tbody.append(GoFlow.formatString(72"<tr style='display:table-row;background-color:rgb(234, 229, 229);height:0px;' group='TemplateOther'>{0}</tr>",73"<td class='Expanded' group='TemplateOther'></td><td style='width: 100%;height:0px;' colspan='3'>其他设置</td>"));74//行12 - 设计区域宽度75this.$tbody.append(GoFlow.formatString(76"<tr group='TemplateOther' property='DesignWidth'><td/><td>设计宽度</td>{0}</tr>",77"<td colspan='2'><input type='text' class='goflow-valid-int' maxlength='50'/></td>"));78//行13 - 设计区域高度79this.$tbody.append(GoFlow.formatString(80"<tr group='TemplateOther' property='DesignHeight'><td/><td>设计高度</td>{0}</tr>",81"<td colspan='2'><input type='text' class='goflow-valid-int' maxlength='50'/></td>"));82//行14 - 备注83this.$tbody.append(GoFlow.formatString(84"<tr group='TemplateOther' property='TemplateMemo'><td/><td>模板备注</td>{0}{1}</tr>",85"<td><div id='TemplateMemo' style='width:100%;Word-break:break-all;word-wrap: break-word;'/></td>",86"<td style='min-width:35px;'><input class='BizData' type='button' value='...'/></td>"));8788//给控件赋值89this.bindData();90//绑定事件91this.bindDelegate();92};93//把流程模板数据绑定到控件94p.bindData =function(data) {95varself =this;96if(data) {97$.each(data,function(k, v) {98self.setData(k, v);99});100}else{101$.each(self.$opts.data,function(k, v) {102self.setValue(k, v);103});104}105};106//绑定事件107p.bindDelegate =function() {108//展开/收缩属性组109this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {110var$templateProp =e.data.self;111varfold = $(e.target).hasClass("Fold");112$(e.target).toggleClass("Fold", !fold);113$(e.target).toggleClass("Expanded", fold);114varselector =GoFlow.formatString(115"[group='{0}'][property]",116$(e.target).attr("group"));117$templateProp.$tbody.children(selector).toggle();118});119};120p.getData =function(key) {121returnthis.$opts.data[key];122};123p.setData =function(key, value) {124this.$opts.data[key] =value;125this.setValue(key, value);126};127p.getValue =function(key) {128switch(key) {129case"TemplateCode":130
break;131case"TemplateName":132
break;133case"InstanceName":134
break;135case"Version":136
break;137case"VerStatus":138
break;139case"DesignerName":140
break;141case"DesignTime":142
break;143case"PublisherName":144
break;145case"PublishTime":146
break;147case"Memo":148
break;149default:150
break;151};152};153p.setValue =function(key, value) {154switch(key) {155case"TemplateCode":156this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);157
break;158case"TemplateName":159this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);160
break;161case"InstanceName":162this.$tbody.find("tr:eq(3) > td:eq(2)").children("input:first").val(value);163
break;164case"Version":165this.$tbody.find("tr:eq(5) > td:eq(2)").children("div:eq(0)").html(value);166
break;167case"VerStatus":168this.$tbody.find("tr:eq(6) > td:eq(2)").children("div:eq(0)").html(value);169
break;170case"DesignerName":171this.$tbody.find("tr:eq(7) > td:eq(2)").children("div:eq(0)").html(value);172
break;173case"DesignTime":174this.$tbody.find("tr:eq(8) > td:eq(2)").children("div:eq(0)").html(value);175
break;176case"PublisherName":177this.$tbody.find("tr:eq(9) > td:eq(2)").children("div:eq(0)").html(value);178
break;179case"PublishTime":180this.$tbody.find("tr:eq(10) > td:eq(2)").children("div:eq(0)").html(value);181
break;182case"DesignWidth":183this.$tbody.find("tr:eq(12) > td:eq(2)").children("input:first").val(value);184
break;185case"DesignHeight":186this.$tbody.find("tr:eq(13) > td:eq(2)").children("input:first").val(value);187
break;188case"TemplateMemo":189this.$tbody.find("tr:eq(14) > td:eq(2)").children("div:eq(0)").html(value);190
break;191default:192
break;193};194};195//显示/隐藏196p.setVisible =function(bool, data) {197this.$table.CSS("display", bool ? "block" : "none");198if(bool &&data) {199this.bindData(data);200}201};202}203};204//初始化TemplateProperty对象205TemplateProperty.prototype.init =function(gf, pdiv, opts) {206this.$gf =gf;207this.$propertyDiv =pdiv;208this.$opts =opts;209this.createTable();210};
View Code
1、开始节点属性
1//定义开始节点属性2StartProperty =function() {3if(typeofStartProperty.defaults == "undefined") {4/*第一次定义对象时为StartProperty类定义静态属性*/5StartProperty.defaults ={6data: {7id: "",8title: ""9}10};11/*第一次定义对象时定义实例共有方法*/12varp =StartProperty.prototype;13p.createTable =function() {14this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0'></table>").css("display", "none");15this.$tbody = $("<tbody></tbody>");16this.$table.append(this.$tbody);17this.$propertyDiv.append(this.$table);18//行0 - 基本属性(分组)19this.$tbody.append(GoFlow.formatString(20"<tr style='display:table-row;background-color:rgb(234, 229, 229);height:0px;' group='StartBasic'>{0}</tr>",21"<td class='Expanded' group='StartBasic'></td><td style='width: 100%;height:0px;' colspan='3'>基本属性</td>"));22//行1 - 结束节点编码23this.$tbody.append(GoFlow.formatString(24"<tr group='StartBasic' property='NodeId'><td/><td>节点编码</td>{0}</tr>",25"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));26//行2 - 结束节点名称27this.$tbody.append(GoFlow.formatString(28"<tr group='StartBasic' property='NodeTitle'><td/><td>节点名称</td>{0}</tr>",29"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));3031//给控件赋值32this.bindData();33//绑定事件34this.bindDelegate();35};36//把流程模板数据绑定到控件37p.bindData =function(data) {38varself =this;39if(data) self.$opts.data =data;40$.each(self.$opts.data,function(k, v) {41self.setValue(k, v);42});43};44//绑定事件45p.bindDelegate =function() {46//展开/收缩属性组47this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {48var$startProp =e.data.self;49varfold = $(e.target).hasClass("Fold");50$(e.target).toggleClass("Fold", !fold);51$(e.target).toggleClass("Expanded", fold);52varselector =GoFlow.formatString(53"[group='{0}'][property]",54$(e.target).attr("group"));55$startProp.$tbody.children(selector).toggle();56});57};58p.getData =function(key) {59returnthis.$opts.data[key];60};61p.setData =function(key, value) {62this.$opts.data[key] =value;63this.setValue(key, value);64};65p.setValue =function(key, value) {66switch(key) {67case"id":68this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);69
break;70case"title":71this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);72
break;73default:74
break;75};76};77//显示/隐藏78p.setVisible =function(bool, data) {79this.$table.css("display", bool ? "block" : "none");80if(bool &&data) {81this.bindData(data);82}83};84}85};86//初始化StartProperty对象87StartProperty.prototype.init =function(pdiv, opts) {88this.$propertyDiv =pdiv;89this.$opts =opts;90this.createTable();91};
View Code
2、结束节点属性(跟开始结点比较类似,直接copy开始结点的)
1//定义结束节点属性2EndProperty =function() {3if(typeofEndProperty.defaults == "undefined") {4/*第一次定义对象时为EndProperty类定义静态属性*/5EndProperty.defaults ={6data: {7id: "",8title: ""9}10};11/*第一次定义对象时定义实例共有方法*/12varp =EndProperty.prototype;13p.createTable =function() {14this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0'></table>").css("display", "none");15this.$tbody = $("<tbody></tbody>");16this.$table.append(this.$tbody);17this.$propertyDiv.append(this.$table);18//行0 - 基本属性(分组)19this.$tbody.append(GoFlow.formatString(20"<tr style='display:table-row;background-color:rgb(234, 229, 229);height:0px;' group='EndBasic'>{0}</tr>",21"<td class='Expanded' group='EndBasic'></td><td style='width: 100%;height:0px;' colspan='3'>基本属性</td>"));22//行1 - 结束节点编码23this.$tbody.append(GoFlow.formatString(24"<tr group='EndBasic' property='NodeId'><td/><td>节点编码</td>{0}</tr>",25"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));26//行2 - 结束节点名称27this.$tbody.append(GoFlow.formatString(28"<tr group='EndBasic' property='NodeTitle'><td/><td>节点名称</td>{0}</tr>",29"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));3031//给控件赋值32this.bindData();33//绑定事件34this.bindDelegate();35};36//把流程模板数据绑定到控件37p.bindData =function(data) {38varself =this;39if(data) self.$opts.data =data;40$.each(self.$opts.data,function(k, v) {41self.setValue(k, v);42});43};44//绑定事件45p.bindDelegate =function() {46//展开/收缩属性组47this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {48var$endProp =e.data.self;49varfold = $(e.target).hasClass("Fold");50$(e.target).toggleClass("Fold", !fold);51$(e.target).toggleClass("Expanded", fold);52varselector =GoFlow.formatString(53"[group='{0}'][property]",54$(e.target).attr("group"));55$endProp.$tbody.children(selector).toggle();56});57};58p.getData =function(key) {59returnthis.$opts.data[key];60};61p.setData =function(key, value) {62this.$opts.data[key] =value;63this.setValue(key, value);64};65p.setValue =function(key, value) {66switch(key) {67case"id":68this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);69
break;70case"title":71this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);72
break;73default:74
break;75};76};77//显示/隐藏78p.setVisible =function(bool, data) {79this.$table.css("display", bool ? "block" : "none");80if(bool &&data) {81this.bindData(data);82}83};84}85};86//初始化EndProperty对象87EndProperty.prototype.init =function(pdiv, opts) {88this.$propertyDiv =pdiv;89this.$opts =opts;90this.createTable();91};
View Code
3、活动节点属性
1//定义活动节点属性2ActivityProperty =function() {3if(typeofActivityProperty.defaults == "undefined") {4/*第一次定义对象时为ActivityProperty类定义静态属性*/5ActivityProperty.defaults ={6data: {7RecNo: 0,8TempNo: 0,9ElementNo: 0,10ActivityCode: "Activity1",11ActivityName: "活动1",12ActivityType: 1,/*1:串签;2:并签*/13ParallelRule: 1,/*1:一票否决;2:一票通过;3:少数服从多数*/14NoApprover:false,//无参与者(不做处理/审批通过)15IsWriter:false,//是发起人(不做处理/审批通过)16IsPrior:false,//前一活动参与(不做处理/审批通过)17IsApproved:false,//参与过流程(不做处理/审批通过)18CanChange:false,//转处理人19CanHandling:false,//正在处理中20CanStop:false,//终止流程21CanCollect:false,//征询意见22CanHandRound:false,//传阅23CanReturnStart:false,//驳回开始24CanReturnPrior:false,//驳回上一步25CanReturnAny:false,//驳回任一步26AllowMail:true,//邮件通知27AllowMessage:true,//消息通知28Approvers: []//参与者(多个)29}30};31/*第一次定义对象时定义实例共有方法*/32varp =ActivityProperty.prototype;33p.createTable =function() {34this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0' style='display:none;'></table>");35this.$tbody = $("<tbody></tbody>");36this.$table.append(this.$tbody);37this.$propertyDiv.append(this.$table);38//行0 - 基本属性(分组)39this.$trActivityBasic =$(GoFlow.formatString(40"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='ActivityBasic'>{0}</tr>",41"<td class='Expanded' group='ActivityBasic'></td><td style='width: 100%;' colspan='3'>基本属性</td>"));42this.$tbody.append(this.$trActivityBasic);43//行1 - 活动编码44this.$tbody.append(GoFlow.formatString(45"<tr group='ActivityBasic' property='ActivityCode'><td/><td>活动编码</td>{0}</tr>",46"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));47//行2 - 活动名称48this.$tbody.append(GoFlow.formatString(49"<tr group='ActivityBasic' property='ActivityName'><td/><td>活动名称</td>{0}</tr>",50"<td colspan='2'><input type='text' maxlength='50'/></td>"));51//行3 - 活动类型52this.$tbody.append(GoFlow.formatString(53"<tr group='ActivityBasic' property='ActivityType'><td/><td>活动类型</td><td colspan='2'>{0}{1}</td></tr>",54"<label for='ActivityType1'><input type='radio' id='ActivityType1' value='1' name='ActivityType'/>串签</label>",55"<label for='ActivityType2' style='padding-left:39px;'><input type='radio' id='ActivityType2' value='2' name='ActivityType'/>并签</label>"));56//行4 - 并签规则57this.$tbody.append(GoFlow.formatString(58"<tr group='ActivityBasic' property='ParallelRule'><td/><td>并签规则</td><td colspan='2'>{0}{1}{2}</td></tr>",59"<label for='ParallelRule1'><input type='radio' id='ParallelRule1' value='1' name='ParallelRule'/>一票通过</label>",60"<label for='ParallelRule2' style='padding-left:15px;'><input type='radio' id='ParallelRule2' value='2' name='ParallelRule'/>一票否决</label>",61"<label for='ParallelRule3' style='padding-left:15px;'><input type='radio' id='ParallelRule3' value='3' name='ParallelRule'/>少数服从多数</label>"));62//行5 - 参与者(分组)63this.$tbody.append(GoFlow.formatString(64"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='ActivityApprover'>{0}</tr>",65"<td class='Expanded' group='ActivityApprover'></td><td style='width: 100%;' colspan='3'>参与者</td>"));66//行6 - 参与者67this.$tbody.append(GoFlow.formatString(68"<tr group='ActivityApprover' property='Approvers'><td/><td>参与者</td>{0}{1}</tr>",69"<td><div id='Approvers' style='width:100%;'/></td>",70"<td style='min-width:35px;'><input class='BizData' type='button' value='...'/></td>"));71//行7 - 无参与者72this.$tbody.append(GoFlow.formatString(73"<tr group='ActivityApprover' property='NoApprover'><td/><td>无参与者</td><td colspan='2'>{0}{1}</td></tr>",74"<label for='NoApprover0'><input type='radio' id='NoApprover0' value='false' name='NoApprover'/>不做处理</label>",75"<label for='NoApprover1' style='padding-left:15px;'><input type='radio' id='NoApprover1' value='true' name='NoApprover'/>审批通过</label>"));76//行8 - 是发起人77this.$tbody.append(GoFlow.formatString(78"<tr group='ActivityApprover' property='IsWriter'><td/><td>是发起人</td><td colspan='2'>{0}{1}</td></tr>",79"<label for='IsWriter0'><input type='radio' id='IsWriter0' value='false' name='IsWriter'/>不做处理</label>",80"<label for='IsWriter1' style='padding-left:15px;'><input type='radio' id='IsWriter1' value='true' name='IsWriter'/>审批通过</label>"));81//行9 - 前一活动参与82this.$tbody.append(GoFlow.formatString(83"<tr group='ActivityApprover' property='IsPrior'><td/><td>前一活动参与</td><td colspan='2'>{0}{1}</td></tr>",84"<label for='IsPrior0'><input type='radio' id='IsPrior0' value='false' name='IsPrior'/>不做处理</label>",85"<label for='IsPrior1' style='padding-left:15px;'><input type='radio' id='IsPrior1' value='true' name='IsPrior'/>审批通过</label>"));86//行10 - 参与过流程87this.$tbody.append(GoFlow.formatString(88"<tr group='ActivityApprover' property='IsApproved'><td/><td>参与过流程</td><td colspan='2'>{0}{1}</td></tr>",89"<label for='IsApproved0'><input type='radio' id='IsApproved0' value='false' name='IsApproved'/>不做处理</label>",90"<label for='IsApproved1' style='padding-left:15px;'><input type='radio' id='IsApproved1' value='true' name='IsApproved'/>审批通过</label>"));91//行11 - 操作权限(分组)92this.$tbody.append(GoFlow.formatString(93"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='Operauthority'>{0}</tr>",94"<td class='Expanded' group='OperAuthority'></td><td style='width: 100%;' colspan='3'>操作权限</td>"));95//行12 - 基本操作96this.$tbody.append(GoFlow.formatString(97"<tr group='OperAuthority' property='BaSEOper'><td/><td>基本操作</td><td colspan='2'>{0}{1}{2}</td></tr>",98"<label for='CanChange'><input type='checkbox' id='CanChange'/>转处理人</label>",99"<label for='CanHandling' style='padding-left:15px;'><input type='checkbox' id='CanHandling'/>正在处理中</label>",100"<label for='CanStop' style='padding-left:15px;'><input type='checkbox' id='CanStop'/>终止流程</label>"));101//行13 - 协办操作102this.$tbody.append(GoFlow.formatString(103"<tr group='OperAuthority' property='AssistantOper'><td/><td>协办操作</td><td colspan='2'>{0}{1}</td></tr>",104"<label for='CanCollect'><input type='checkbox' id='CanCollect'/>征询意见</label>",105"<label for='CanHandRound' style='padding-left:15px;'><input type='checkbox' id='CanHandRound'/>传阅</label>"));106//行14 - 驳回操作107this.$tbody.append(GoFlow.formatString(108"<tr group='OperAuthority' property='RejectOper'><td/><td>驳回操作</td><td colspan='2'>{0}{1}{2}</td></tr>",109"<label for='CanReturnStart'><input type='checkbox' id='CanReturnStart'/>驳回开始</label>",110"<label for='CanReturnPrior' style='padding-left:15px;'><input type='checkbox' id='CanReturnPrior'/>驳回上一步</label>",111"<label for='CanReturnAny' style='padding-left:15px;'><input type='checkbox' id='CanReturnAny'/>驳回任一步</label>"));112//行15 - 通知设置(分组)113this.$tbody.append(GoFlow.formatString(114"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='ActivityNotify'>{0}</tr>",115"<td class='Expanded' group='ActivityNotify'></td><td style='width: 100%;' colspan='3'>通知设置</td>"));116//行16 - 通知设置117this.$tbody.append(GoFlow.formatString(118"<tr group='ActivityNotify' property='ActivityNotify'><td/><td>通知设置</td><td colspan='2'>{0}{1}</td></tr>",119"<label for='AllowMail'><input type='checkbox' id='AllowMail'/>邮件通知</label>",120"<label for='AllowMessage' style='padding-left:15px;'><input type='checkbox' id='AllowMessage'/>消息通知</label>"));121122//给控件赋值123this.bindData();124//绑定事件125this.bindDelegate();126};127//把活动数据绑定到控件128p.bindData =function(data) {129varself =this;130if(data) self.$opts.data =data;131$.each(self.$opts.data,function(k, v) {132self.setValue(k, v);133});134};135//绑定事件136p.bindDelegate =function() {137//展开/收缩属性组138this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {139var$activityProp =e.data.self;140varfold = $(e.target).hasClass("Fold");141$(e.target).toggleClass("Fold", !fold);142$(e.target).toggleClass("Expanded", fold);143varselector =GoFlow.formatString(144"[group='{0}'][property]",145$(e.target).attr("group"));146$activityProp.$tbody.children(selector).toggle();147});148};149p.getData =function(key) {150returnthis.$opts.data[key];151};152p.setData =function(key, value) {153this.$opts.data[key] =value;154this.setValue(key, value);155};156p.getValue =function(key) {157switch(key) {158default:159
break;160};161};162p.setValue =function(key, value) {163switch(key) {164case"ActivityCode":165this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);166
break;167case"ActivityName":168this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);169
break;170case"ActivityType":171this.$tbody.find("tr:eq(3) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);172this.setParallelRuleReadonly(value == "1");173
break;174case"ParallelRule":175this.$tbody.find("tr:eq(4) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);176
break;177case"Approvers":178var$divApprovers =this.$tbody.find("#Approvers").empty();179$.each(value,function(idx, item) {180$divApprovers.append(GoFlow.formatString(181"<div style='width:100%;padding:2px;'>{0} - {1}</div>", item.ApproveOrder, item.ApproverText));182});183
break;184case"NoApprover":185this.$tbody.find("tr:eq(7) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);186
break;187case"IsWriter":188this.$tbody.find("tr:eq(8) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);189
break;190case"IsPrior":191this.$tbody.find("tr:eq(9) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);192
break;193case"IsApproved":194this.$tbody.find("tr:eq(10) > td:eq(2)").find("input[value='" + value + "']").prop("checked",true);195
break;196case"CanChange":197this.$tbody.find("tr:eq(12) > td:eq(2)").find("input[id='CanChange']").prop("checked", value);198
break;199case"CanHandling":200this.$tbody.find("tr:eq(12) > td:eq(2)").find("input[id='CanHandling']").prop("checked", value);201
break;202case"CanStop":203this.$tbody.find("tr:eq(12) > td:eq(2)").find("input[id='CanStop']").prop("checked", value);204
break;205case"CanCollect":206this.$tbody.find("tr:eq(13) > td:eq(2)").find("input[id='CanCollect']").prop("checked", value);207
break;208case"CanHandRound":209this.$tbody.find("tr:eq(13) > td:eq(2)").find("input[id='CanHandRound']").prop("checked", value);210
break;211case"CanReturnStart":212this.$tbody.find("tr:eq(14) > td:eq(2)").find("input[id='CanReturnStart']").prop("checked", value);213
break;214case"CanReturnPrior":215this.$tbody.find("tr:eq(14) > td:eq(2)").find("input[id='CanReturnPrior']").prop("checked", value);216
break;217case"CanReturnAny":218this.$tbody.find("tr:eq(14) > td:eq(2)").find("input[id='CanReturnAny']").prop("checked", value);219
break;220case"AllowMail":221this.$tbody.find("tr:eq(16) > td:eq(2)").find("input[id='AllowMail']").prop("checked", value);222
break;223case"AllowMessage":224this.$tbody.find("tr:eq(16) > td:eq(2)").find("input[id='AllowMessage']").prop("checked", value);225
break;226default:227
break;228};229};230//设置并签规则是否只读231p.setParallelRuleReadonly =function(bool) {232if(bool) {233this.$tbody.find("tr:eq(4) > td:eq(2)").attr("readonly", "true")234this.$tbody.find("tr:eq(4) > td:eq(2)").find("input").attr("disabled", "disabled");235}236else{237this.$tbody.find("tr:eq(4) > td:eq(2)").removeAttr("readonly");238this.$tbody.find("tr:eq(4) > td:eq(2)").find("input").removeAttr("disabled");239}240};241//显示/隐藏242p.setVisible =function(bool, data) {243this.$table.css("display", bool ? "block" : "none");244if(bool &&data) {245this.bindData(data);246}247};248}249};250//初始化ActivityProperty对象251ActivityProperty.prototype.init =function(gf, pdiv, opts) {252this.$gf =gf;253this.$propertyDiv =pdiv;254this.$opts =opts;255this.createTable();256};
View Code
4、连线属性
1//定义连线节点属性2LineProperty =function() {3if(typeofLineProperty.defaults == "undefined") {4/*第一次定义对象时为LineProperty类定义静态属性*/5LineProperty.defaults ={6data: {7RecNo: 0,8TempNo: 0,9ElementNo: 0,10LineCode: "Line_1",11LineTitle: "",12LineType: 'I',/*连线类型(I/Z/N)*/13FromElementCode: "",14FromElementName: '',15ToElementCode: "",16ToElementName: ''17}18};19/*第一次定义对象时定义实例共有方法*/20varp =LineProperty.prototype;21p.createTable =function() {22this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0' style='display:none;'></table>");23this.$tbody = $("<tbody></tbody>");24this.$table.append(this.$tbody);25this.$propertyDiv.append(this.$table);26//行0 - 基本属性(分组)27this.$trLineBasic =$(GoFlow.formatString(28"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='LineBasic'>{0}</tr>",29"<td class='Expanded' group='LineBasic'></td><td style='width: 100%;' colspan='3'>基本属性</td>"));30this.$tbody.append(this.$trLineBasic);31//行1 - 连线编码32this.$tbody.append(GoFlow.formatString(33"<tr group='LineBasic' property='LineCode'><td/><td>连线编码</td>{0}</tr>",34"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));35//行2 - 连线名称36this.$tbody.append(GoFlow.formatString(37"<tr group='LineBasic' property='LineTitle'><td/><td>连线名称</td>{0}</tr>",38"<td colspan='2'><input type='text' maxlength='50'/></td>"));39//行3 - 连接节点(分组)40this.$tbody.append(GoFlow.formatString(41"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='LineNode'>{0}</tr>",42"<td class='Expanded' group='LineNode'></td><td style='width: 100%;' colspan='3'>连接节点</td>"));43//行4 - 开始节点44this.$tbody.append(GoFlow.formatString(45"<tr group='LineNode' property='FromElementName'><td/><td>开始节点</td>{0}</tr>",46"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));47//行5 - 结束节点48this.$tbody.append(GoFlow.formatString(49"<tr group='LineNode' property='ToElementName'><td/><td>结束节点</td>{0}</tr>",50"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));5152//给控件赋值53this.bindData();54//绑定事件55this.bindDelegate();56};57//把连线数据绑定到控件58p.bindData =function(data) {59varself =this;60if(data) self.$opts.data =data;61$.each(self.$opts.data,function(k, v) {62self.setValue(k, v);63});64};65//绑定事件66p.bindDelegate =function() {67//展开/收缩属性组68this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {69var$lineProp =e.data.self;70varfold = $(e.target).hasClass("Fold");71$(e.target).toggleClass("Fold", !fold);72$(e.target).toggleClass("Expanded", fold);73varselector =GoFlow.formatString(74"[group='{0}'][property]",75$(e.target).attr("group"));76$lineProp.$tbody.children(selector).toggle();77});78};79p.getData =function(key) {80returnthis.$opts.data[key];81};82p.setData =function(key, value) {83this.$opts.data[key] =value;84this.setValue(key, value);85};86p.getValue =function(key) {87switch(key) {88default:89
break;90};91};92p.setValue =function(key, value) {93switch(key) {94case"LineCode":95this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);96
break;97case"LineTitle":98this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);99
break;100case"FromElementName":101this.$tbody.find("tr:eq(4) > td:eq(2)").children("input:first").val(value);102
break;103case"ToElementName":104this.$tbody.find("tr:eq(5) > td:eq(2)").children("input:first").val(value);105
break;106default:107
break;108};109};110//显示/隐藏111p.setVisible =function(bool, data) {112this.$table.css("display", bool ? "block" : "none");113if(bool &&data) {114this.bindData(data);115}116};117}118};119//初始化LineProperty对象120LineProperty.prototype.init =function(gf, pdiv, opts) {121this.$gf =gf;122this.$propertyDiv =pdiv;123this.$opts =opts;124this.createTable();125};
View Code
5、条件结点属性
1//定义条件节点属性2ConditionProperty =function() {3if(typeofConditionProperty.defaults == "undefined") {4/*第一次定义对象时为ConditionProperty类定义静态属性*/5ConditionProperty.defaults ={6data: {7RecNo: 0,8TempNo: 0,9ElementNo: 0,10ConditionCode: "Condition_1",11ConditionTitle: "",12ElementCodeForTrue: "",13ElementNameForTrue: "",14ElementCodeForFalse: "",15ElementNameForFalse: "",16Expressions: []//条件表达式(多个)17}18};19/*第一次定义对象时定义实例共有方法*/20varp =ConditionProperty.prototype;21p.createTable =function() {22this.$table = $("<table class='gf_prop_tb' cellpadding='0' cellspacing='0' style='display:none;'></table>");23this.$tbody = $("<tbody></tbody>");24this.$table.append(this.$tbody);25this.$propertyDiv.append(this.$table);26//行0 - 基本属性(分组)27this.$trConditionBasic =$(GoFlow.formatString(28"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='ConditionBasic'>{0}</tr>",29"<td class='Expanded' group='ConditionBasic'></td><td style='width: 100%;' colspan='3'>基本属性</td>"));30this.$tbody.append(this.$trConditionBasic);31//行1 - 条件编码32this.$tbody.append(GoFlow.formatString(33"<tr group='ConditionBasic' property='ConditionCode'><td/><td>条件编码</td>{0}</tr>",34"<td colspan='2' readonly='true'><input type='text' maxlength='50' readonly='readonly'/></td>"));35//行2 - 条件名称36this.$tbody.append(GoFlow.formatString(37"<tr group='ConditionBasic' property='ConditionTitle'><td/><td>条件名称</td>{0}</tr>",38"<td colspan='2'><input type='text' maxlength='50'/></td>"));39//行3 - 条件公式40this.$tbody.append(GoFlow.formatString(41"<tr group='ConditionBasic' property='Expressions'><td/><td>条件公式</td>{0}{1}</tr>",42"<td><div id='Expressions' style='width:100%;'/></td>",43"<td style='min-width:35px;'><input class='BizData' type='button' value='...'/></td>"));44//行4 - 连接节点(分组)45this.$tbody.append(GoFlow.formatString(46"<tr style='display:table-row;background-color:rgb(234, 229, 229);' group='ConditionNode'>{0}</tr>",47"<td class='Expanded' group='ConditionNode'></td><td style='width: 100%;' colspan='3'>连接节点</td>"));48//行5 - 条件为真49this.$tbody.append(GoFlow.formatString(50"<tr group='ConditionNode' property='ElementNameForTrue'><td/><td>条件为真</td>{0}{1}</tr>",51"<td readonly='true'><input id='ElementNameForTrue' style='width:100%;' type='text' maxlength='50' readonly='true'/></td>",52"<td style='min-width:35px;' readonly='true'><input class='BizData' type='button' value='...'/></td>"));53//行6 - 条件为假54this.$tbody.append(GoFlow.formatString(55"<tr group='ConditionNode' property='ElementNameForFalse'><td/><td>条件为假</td>{0}{1}</tr>",56"<td readonly='true'><input id='ElementNameForFalse' style='width:100%;' type='text' maxlength='50' readonly='true'/></td>",57"<td style='min-width:35px;' readonly='true'><input class='BizData' type='button' value='...'/></td>"));5859//给控件赋值60this.bindData();61//绑定事件62this.bindDelegate();63};64//把条件数据绑定到控件65p.bindData =function(data) {66varself =this;67if(data) self.$opts.data =data;68$.each(self.$opts.data,function(k, v) {69self.setValue(k, v);70});71};72//绑定事件73p.bindDelegate =function() {74//展开/收缩属性组75this.$tbody.delegate("td[group].Fold,td[group].Expanded", "click", { self:this},function(e) {76var$conditionProp =e.data.self;77varfold = $(e.target).hasClass("Fold");78$(e.target).toggleClass("Fold", !fold);79$(e.target).toggleClass("Expanded", fold);80varselector =GoFlow.formatString(81"[group='{0}'][property]",82$(e.target).attr("group"));83$conditionProp.$tbody.children(selector).toggle();84});85};86p.getData =function(key) {87returnthis.$opts.data[key];88};89p.setData =function(key, value) {90this.$opts.data[key] =value;91this.setValue(key, value);92};93p.getValue =function(key) {94switch(key) {95default:96
break;97};98};99p.setValue =function(key, value) {100switch(key) {101case"ConditionCode":102this.$tbody.find("tr:eq(1) > td:eq(2)").children("input:first").val(value);103
break;104case"ConditionTitle":105this.$tbody.find("tr:eq(2) > td:eq(2)").children("input:first").val(value);106
break;107case"Expressions":108var$divExpressions =this.$tbody.find("#Expressions").empty();109$.each(value,function(idx, item) {110$divExpressions.append(GoFlow.formatString(111"<div style='width:100%;padding:2px;'>{0} {1} {2} {3}</div>",112item.LeftValue, item.LogicalOper, item.RightValue, item.RelationOper));113});114
break;115case"ElementNameForTrue":116this.$tbody.find("tr:eq(5) > td:eq(2)").children("input:first").val(value);117
break;118case"ElementNameForFalse":119this.$tbody.find("tr:eq(6) > td:eq(2)").children("input:first").val(value);120
break;121default:122
break;123};124};125//显示/隐藏126p.setVisible =function(bool, data) {127this.$table.css("display", bool ? "block" : "none");128if(bool &&data) {129this.bindData(data);130}131};132}133};134//初始化ConditionProperty对象135ConditionProperty.prototype.init =function(gf, pdiv, opts) {136this.$gf =gf;137this.$propertyDiv =pdiv;138this.$opts =opts;139this.createTable();140};
View Code
6、切换属性方法
//切换属性显示p.switchPropery =function(id, type) {
type= type ? type : "template";this.setPropertyTitle(id, type);this.$templateProp.setVisible(type == "template");//显示流程模板属性this.$startProp.setVisible(type == "start", type == "start" ?this.$nodeData[id] :null);//显示开始节点属性this.$endProp.setVisible(type == "end", type == "end" ?this.$nodeData[id] :null);//显示结束节点属性this.$lineProp.setVisible(type == "line", type == "line" ?this.$lineData[id].lineProperty :null);//显示连线属性this.$activityProp.setVisible(type == "activity", type == "activity" ?this.$nodeData[id].activityProperty :null);//显示活动节点属性this.$conditionProp.setVisible(type == "condition", type == "condition" ?this.$nodeData[id].conditionProperty :null);//显示条件节点属性};
7、切换属性标题显示方法
//设置属性标题p.setPropertyTitle =function(id, type) {vartext =type== "template" && "流程模板属性:" +this.$templateData.TemplateName|| type == "start" && "开始节点属性:" +this.$nodeData[id].title|| type == "end" && "结束节点属性:" +this.$nodeData[id].title|| type == "line" && "连线属性:" +id|| type == "activity" && "活动节点属性:" +this.$nodeData[id].title|| type == "condition" && "条件节点属性:" +this.$nodeData[id].title|| "";this.$propertyHeadDiv.children(".gf_p_head_inner").html(text);
}
8、goflow插件最新代码结构如下
(function($, undefined) {//定义流程模板属性TemplateProperty =function() {
};//初始化TemplateProperty对象TemplateProperty.prototype.init =function(gf, pdiv, opts) {
};//定义开始节点属性StartProperty =function() {
};//初始化StartProperty对象StartProperty.prototype.init =function(pdiv, opts) {
};//定义结束节点属性EndProperty =function() {
};//初始化EndProperty对象EndProperty.prototype.init =function(pdiv, opts) {
};//定义活动节点属性ActivityProperty =function() {
};//初始化ActivityProperty对象ActivityProperty.prototype.init =function(gf, pdiv, opts) {
};//定义连线节点属性LineProperty =function() {
};//初始化LineProperty对象LineProperty.prototype.init =function(gf, pdiv, opts) {
};//定义条件节点属性ConditionProperty =function() {
};//初始化ConditionProperty对象ConditionProperty.prototype.init =function(gf, pdiv, opts) {
};//定义GoFlow类GoFlow =function() {
};//初始化GoFlow对象(gfDiv:jQuery对象;opts:参数)GoFlow.prototype.init =function(gfDiv, opts) {
};//插件的定义$.fn.goflow =function(opts) {
};
})(jQuery);//闭包结束
代码:GoFlow_06.zip