MWF.require("MWF.widget.UUID", null,false); MWF.require("MWF.widget.JsonTemplate", null, false); MWF.xApplication.process.ProcessDesigner.Property = new Class({ Implements: [Options, Events], load: function(){ if (!this.process.options.isView){ if (this.fireEvent("queryLoad")){ MWF.getRequestText(this.htmlPath, function(responseText, responseXML){ this.htmlString = responseText; this.fireEvent("postLoad"); }.bind(this)); } this.process.propertyListNode.addEvent("keydown", function(e){e.stopPropagation();}); } }, editProperty: function(td){ }, getHtmlString: function(callback){ if (!this.htmlString){ MWF.getRequestText(this.htmlPath, function(responseText, responseXML){ this.htmlString = responseText; if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, //隐藏高级属性 hideAdvanced: function(){ if (this.process.panel.showAdvanced && !this.process.panel.showAdvanced.checked){ var advs = this.propertyContent.querySelectorAll("*[data-o2-advanced=\"yes\"]"); if (advs && advs.length){ for (var i=0; i1){ var k = names.shift(); if (!o.hasOwnProperty(k)){ o[k] = {}; } o=o[k]; } var key = names.shift(); o[key] = value; }, setRadioValue: function(name, input){ if (input.checked){ // var oldValue = this.data[name]; var value = input.value; if (value=="false") value = false; if (value=="true") value = true; if (input.dataset.valueType && input.dataset.valueType==='number'){ value = parseFloat(value); } var names = name.split("."); var oldValue = null; var o = this.data; while (names.length>1){ var k = names.shift(); if (!o.hasOwnProperty(k)){ o[k] = {}; } o=o[k]; } var key = names.shift(); oldValue = o[key]; o[key] = value; // this.data[name] = value; if (this.route) this.route._setEditProperty(name, input, oldValue); } }, setValue: function(name, value){ // var oldValue = this.data[name]; // this.data[name] = value; var names = name.split("."); var oldValue = null; var o = this.data; while (names.length>1){ var k = names.shift(); if (!o.hasOwnProperty(k)){ o[k] = {}; } o=o[k]; } var key = names.shift(); oldValue = o[key]; o[key] = value; if (name=="name"){ if (!value) this.data[name] = MWF.APPPD.LP.unnamed; // this.activity.redraw(); } if (this.route) this.route._setEditProperty(name, input, oldValue); }, setEditNodeStyles: function(node){ var nodes = node.getChildren(); if (nodes.length){ nodes.each(function(el){ var cName = el.get("class"); if (cName){ if (this.process.css[cName]) el.setStyles(this.process.css[cName]); } this.setEditNodeStyles(el); }.bind(this)); } }, loadScriptText: function(){ this.scriptTexts = []; var scriptNodes = this.propertyContent.getElements(".MWFScriptText"); MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.ScriptText", function(){ var _self = this; scriptNodes.each(function(node){ var api = node.dataset["o2Api"]; var editorType = node.dataset["editorType"]; var loadImmediately = node.dataset["loadImmediately"]; var script = new MWF.xApplication.process.ProcessDesigner.widget.ScriptText(node, this.data[node.get("name")], this.process.designer, { "api": api, "forceType": editorType || null, "maskNode": this.process.designer.content, "maxObj": this.process.designer.paperNode, "onChange": function(code){ _self.data[node.get("name")] = code; }, "type": node.dataset["type"] }); if( loadImmediately )script.loadEditor(); this.scriptTexts.push(script); //this.setScriptItems(script, node); node.store("editor", script); }.bind(this)); }.bind(this)); }, loadScriptInput: function(){ var scriptNodes = this.propertyContent.getElements(".MWFScript"); MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.ScriptSelector", function(){ var _self = this; scriptNodes.each(function(node){ var script = new MWF.xApplication.process.ProcessDesigner.widget.ScriptSelector(node, this.data[node.get("name")], this.process.designer, { "maskNode": this.process.designer.content, "onSelected": function(scriptData){ _self.data[node.get("name")] = scriptData.name; }, "onDelete": function(){ _self.data[node.get("name")] = ""; node.empty(); } //"onPostSave": function(script){ // this.saveScriptItem(node, script); //}.bind(this), //"onQueryDelete": function(script){ // this.deleteScriptItem(node, script); //}.bind(this) }); //this.setScriptItems(script, node); node.store("selector", script); }.bind(this)); }.bind(this)); }, loadScriptArea: function(){ var scriptAreas = this.propertyContent.getElements(".MWFScriptArea"); var formulaAreas = this.propertyContent.getElements(".MWFFormulaArea"); this.loadScriptEditor(scriptAreas); this.loadScriptEditor(formulaAreas, "formula"); }, loadScriptEditor: function(scriptAreas, style){ scriptAreas.each(function(node){ var title = node.get("title"); var name = node.get("name"); if (!this.data[name]) this.data[name] = {"code": "", "html": ""}; var scriptContent = this.data[name]; MWF.require("MWF.widget.ScriptArea", function(){ var scriptArea = new MWF.widget.ScriptArea(node, { "title": title, //"maxObj": this.propertyNode.parentElement.parentElement.parentElement, "maxObj": this.process.designer.content, "onChange": function(){ if (!this.data[name]){ this.data[name] = {"code": "", "html": ""}; //if (this.module.form.scriptDesigner) this.module.form.scriptDesigner.addScriptItem(this.data[name], "code", this.data, name); } var json = scriptArea.toJson(); this.data[name].code = json.code; }.bind(this), //"onSave": function(){ // this.designer.saveForm(); //}.bind(this), "style": style || "default" }); scriptArea.load(scriptContent); }.bind(this)); }.bind(this)); }, loadUnitTypeSelector: function(){ var nodes = this.propertyContent.getElements(".MWFFormUnitTypeSelector"); if (nodes.length){ this.getUnitTypeList(function(){ nodes.each(function(node){ var select = new Element("select").inject(node); select.addEvent("change", function(e){ this.setValue(e.target.getParent("div").get("name"), e.target.options[e.target.selectedIndex].value); }.bind(this)); this.setUnitTypeSelectOptions(node, select); this.setValue(select.getParent("div").get("name"), select.options[select.selectedIndex].value); // var refreshNode = new Element("div", {"styles": this.form.css.propertyRefreshFormNode}).inject(node); // refreshNode.addEvent("click", function(e){ // this.getUnitTypeList(function(){ // this.setUnitTypeSelectOptions(node, select); // }.bind(this), true); // }.bind(this)); }.bind(this)); }.bind(this)); } }, setUnitTypeSelectOptions: function(node, select){ var name = node.get("name"); select.empty(); var option = new Element("option", {"value":"all", "text": MWF.xApplication.process.ProcessDesigner.LP.all, "selected": (!this.data[name] || this.data[name]==="all")}).inject(select); this.unitTypeList.each(function(unitType){ var option = new Element("option", { "text": unitType, "value": unitType, "selected": (this.data[name]===unitType) }).inject(select); }.bind(this)); }, getUnitTypeList: function(callback, refresh){ if (!this.unitTypeList || refresh){ //MWF.xDesktop.requireApp("Org", "Actions.RestActions", function(){ // var action = new MWF.xApplication.Org.Actions.RestActions(); var action = MWF.Actions.get("x_organization_assemble_control"); action.listUnitType(function(json){ this.unitTypeList = json.data.valueList; if (callback) callback(); }.bind(this)); //}.bind(this)); }else{ if (callback) callback(); } }, loadFormFieldInput: function(){ var fieldNodes = this.propertyContent.getElements(".MWFFormFieldPerson"); MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.PersonSelector", function(){ fieldNodes.each(function(node){ var dataType = node.get("data-o2-type"); var data = this.data[node.get("name")]; if( dataType && dataType === "string" && o2.typeOf(data) === "string")data = data.split(","); new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "formField", "application": this.process.process.application, "fieldType": "person", "names": data || [], "onChange": function(ids){this.savePersonItem(node, ids, dataType);}.bind(this) }); }.bind(this)); }.bind(this)); }, createCalendar: function(node){ if (!node.retrieve("calendar")){ var calendar = new MWF.widget.Calendar(node, { "isTime": true, // "target": node.getParent(), "style": "xform", "secondEnable": true, "format": "db", "onChange": function(dv, date, t){ this.setValue(node.get("name"), dv) }.bind(this) }); node.store("calendar", calendar); } }, loadCalendarInput: function(){ var nodes = this.propertyContent.getElements(".MWFDateTime"); MWF.require("MWF.widget.Calendar", function(){ nodes.each(function(node){ var input = node.getFirst(); input.addEvents({ "click": function(){ this.createCalendar(input) }.bind(this), "focus": function(){ this.createCalendar(input) }.bind(this) }); }.bind(this)); }.bind(this)); }, loadDataTraceFieldSelect: function(){ var buttonList = this.propertyContent.getElements(".MWFDataTraceFieldSelect"); var lp = this.process.designer.lp.propertyTemplate; buttonList.each(function(node){ node.addEventListener("click", function(){ var arrayListNode = node.getNext(); var arrayList = arrayListNode.arrayList; var selectedFields = arrayList.toArray(); var content = new Element('div.o2_vue', { "styles": this.process.css.selectDataTraceFieldArea }); const formArea = new Element('div', {"styles": this.process.css.selectDataTraceArea}).inject(content); new Element('div', {"styles": this.process.css.selectDataTraceAreaTitle, text: lp.selectForm}).inject(formArea); const formContent = new Element('div', {"styles": this.process.css.selectDataTraceAreaContent}).inject(formArea); const fieldArea = new Element('div', {"styles": this.process.css.selectDataTraceArea}).inject(content); new Element('div', {"styles": this.process.css.selectDataTraceAreaTitle, text: lp.selectField}).inject(fieldArea); const fieldContent = new Element('div', {"styles": this.process.css.selectDataTraceAreaContent}).inject(fieldArea); const selectedArea = new Element('div', {"styles": this.process.css.selectDataTraceArea}).inject(content); new Element('div', {"styles": this.process.css.selectDataTraceAreaTitle, text: lp.selectedField}).inject(selectedArea); const selectedContent = new Element('div', {"styles": this.process.css.selectDataTraceAreaContent}).inject(selectedArea); if (!selectedContent.selectedFields) selectedContent.selectedFields = {}; selectedFields.forEach(function(name){ this.createSelectedItem(name, selectedContent); }.bind(this)); content.style.boxSizing = 'border-box!important'; var _self = this; o2.Actions.load("x_processplatform_assemble_designer").FormAction.listWithApplication(this.process.process.application, function(json){ json.data.forEach(function(form){ var item = new Element("div", { "text": form.name, "styles": _self.process.css.selectFormItemNode }).inject(formContent); item.store('formId', form.id); item.addEvents({ "mouseover": function(e){e.target.addClass('lightColor_bg');}, "mouseout": function(e){e.target.removeClass('lightColor_bg');}, "click": function(e){ _self.selectedForm(e.target, fieldContent, selectedContent); } }); }); }); o2.DL.open({ title: lp.dataTraceFieldNamesSelect, width: 700, height: 500, content: content, buttonList: [ { text: "确定", action: function(){ _self.selectFieldsOk(selectedContent, arrayList); this.close(); } }, { text: "关闭", type: "cancel", action: function(){ this.close(); } } ] }); }.bind(this)); }.bind(this)); }, selectFieldsOk: function(selectedContent, arrayList){ var fields = Object.keys(selectedContent.selectedFields); arrayList.clear(); arrayList.loadContent(fields); arrayList.fireEvent("change"); }, selectedForm: function(node, fieldContent, selectedContent){ if (fieldContent.formNode){ fieldContent.formNode.removeClass('mainColor_bg'); } node.addClass('mainColor_bg'); node.removeClass('lightColor_bg'); fieldContent.formNode = node; var _self = this; var id = node.retrieve("formId"); o2.Actions.load("x_processplatform_assemble_designer").FormAction.get(id, function(form){ var fields = this.getFormFields(form.data.data); var mobileFields = this.getFormFields(form.data.mobileData); fields.forEach(function(name){ _self.createFieldItem(name, fieldContent, selectedContent); }); mobileFields.forEach(function(name){ if (fields.indexOf(name)===-1){ _self.createFieldItem(name, fieldContent, selectedContent); } }); }.bind(this)); }, createFieldItem: function(name, fieldContent, selectedContent){ var item = new Element("label", { "html": "
"+name+"
", "styles": this.process.css.selectFieldItemNode }).inject(fieldContent); if (selectedContent.selectedFields[name]){ item.getElement('input').checked = true; } var _self = this; item.addEvents({ "mouseover": function(e){if (!item.firstElementChild.checked) item.addClass('lightColor_bg');}, "mouseout": function(e){if (!item.firstElementChild.checked) item.removeClass('lightColor_bg');} }); item.firstElementChild.addEventListener('click', function(e){ e.stopPropagation(); _self.clickField(e.target, selectedContent); }); }, clickField: function(input, selectedContent){ var checked = input.checked; var name = input.value; var node = input.parentElement; if (checked){ node.addClass('mainColor_bg'); node.removeClass('lightColor_bg'); this.createSelectedItem(name, selectedContent); }else{ node.removeClass('mainColor_bg'); var item = selectedContent.selectedFields[name]; item.destroy(); selectedContent.selectedFields[name] = null; } }, createSelectedItem: function(name, node){ var flag = !node.selectedFields[name]; if (flag){ var item = new Element("div", { "html": name, "styles": this.process.css.selectFormItemNode }).inject(node); node.selectedFields[name] = item; } }, getFormFields: function(data){ if (data){ var fieldTypeList = ["textfield", "textarea", "select", "radio", "personfield", "orgfield", "org", "number", "currency", "eltime", "elswitch", "elslider", "elselect", "elrate", "elradio", "elnumber", "elinput", "eldatetime", "eldate", "elcolorpicker", "elcheckbox", "elcascader", "elautocomplete", "combox", "checkbox", "calendar", "address"]; var formData = JSON.decode(MWF.decodeJsonString(data)); var json = formData.json; return Object.keys(json.moduleList).filter(function(k){ var m = json.moduleList[k] return (fieldTypeList.indexOf(m.type.toLowerCase())!==-1 || fieldTypeList.indexOf(m.moduleName)!==-1); }) // .map(function(k){ // return { // name: k, // type: json.moduleList[k].type, // } // }); } return []; }, saveGobackConfig: function(check, select, defineConfigList){ var activityId = check.value; var config = defineConfigList.find(function(c){ return c.activity === activityId; }); if (check.checked){ var way = select.options[select.selectedIndex].value; if (config){ config.way = way; }else{ defineConfigList.push({ activity: activityId, way: way }); } }else { if (config) { defineConfigList.erase(config); } } }, loadGobackActivityConfig: function(){ var nodes = this.propertyContent.getElements(".gobackActivityConfig"); // this.manuals nodes.each(function(node){ var keys = Object.keys(this.process.manuals); if (keys.length){ var html = '' + // '' + '' + '' + '
活动退回后处理方式
'; node.insertAdjacentHTML('beforeend', html); var table = node.getElement('table'); if (!this.data.goBackConfig) this.data.goBackConfig = {}; if (!this.data.goBackConfig.defineConfigList) this.data.goBackConfig.defineConfigList = []; var defineConfigList = this.data.goBackConfig.defineConfigList; keys.forEach(function(key){ var activity = this.process.manuals[key]; if (activity.data.id !== this.data.id){ var config = defineConfigList.find(function(c){ return c.activity === activity.data.id; }); var tr = table.insertRow(); var td = tr.insertCell(); td.setStyles({ "border": "1px solid #cccccc" }); var label = new Element('label').inject(td); var check = new Element('input',{ type: 'checkbox', value: activity.data.id, checked: !!config }).inject(label); label.appendChild(document.createTextNode(activity.data.name)); check.addEvent('click', function(e){ var select = e.target.getParent('tr').getElement('select'); this.saveGobackConfig(e.target, select, defineConfigList); }.bind(this)); td = tr.insertCell(); td.setStyles({ "border": "1px solid #cccccc" }); var select = new Element('select', { html: '' + '' + '' + '' }).inject(td); select.addEvent('click', function(e){ var check = e.target.getParent('tr').getElement('input'); this.saveGobackConfig(check, e.target, defineConfigList); }.bind(this)); } }.bind(this)); } // var title = node.get("title"); // var name = node.get("name"); // var lName = name.toLowerCase(); // var collapse = node.get("collapse"); // var mapObj = this.data[name] || {}; // //if (!mapObj) mapObj = {}; // MWF.require("MWF.widget.Maplist", function(){ // node.empty(); // var maplist = new MWF.widget.Maplist(node, { // "title": title, // "collapse": (collapse) ? true : false, // "onChange": function(){ // //this.data[name] = maplist.toJson(); // // // //var oldData = this.data[name]; // this.setValue(name, maplist.toJson()); // // this.changeStyle(name, oldData); // // this.changeData(name); // }.bind(this), // "isProperty": (lName.contains("properties") || lName.contains("property") || lName.contains("attribute")) // }); // maplist.load(mapObj); // //this.maplists[name] = maplist; // }.bind(this)); }.bind(this)); }, loadPersonInput: function(){ var personIdentityNodes = this.propertyContent.getElements(".MWFPersonIdentity"); var personNodes = this.propertyContent.getElements(".MWFPersonPerson"); var personUnitNodes = this.propertyContent.getElements(".MWFPersonUnit"); var personGroupNodes = this.propertyContent.getElements(".MWFPersonGroup"); var dutyNameNodes = this.propertyContent.getElements(".MWFPersonDuty"); // var personDepartmentNodes = this.propertyContent.getElements(".MWFPersonDepartment"); // var personCompanyNodes = this.propertyContent.getElements(".MWFPersonCompany"); var dutyNodes = this.propertyContent.getElements(".MWFDutySelector"); var tableNodes = this.propertyContent.getElements(".MWFTableSelector"); var cmsCategoryNodes = this.propertyContent.getElements(".MWFCMSCategorySelector"); var formFieldString = this.propertyContent.getElements(".MWFFormFieldString"); MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.PersonSelector", function(){ personIdentityNodes.each(function(node){ var count = node.get("count") || 0; new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "identity", "names": this.data[node.get("name")], "count": count, "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); personNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "person", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); personUnitNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "unit", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); personGroupNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "group", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); dutyNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "duty", "names": this.data[node.get("name")], "onChange": function(ids){this.addDutyItem(node, ids);}.bind(this), "onRemoveDuty": function(item){this.removeDutyItem(node, item);}.bind(this) }); }.bind(this)); dutyNameNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "dutyName", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); tableNodes.each(function(node){ var resultKey = node.get("data-result-key"); var selector = new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "queryTable", "count": node.get("count") || 0, "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids, null, resultKey);}.bind(this) }); node.store("selector", selector); }.bind(this)); cmsCategoryNodes.each(function(node){ var resultKey = node.get("data-result-key"); var data; if( resultKey ){ var d = this.data[node.get("name")] || []; data = ( o2.typeOf( d ) === "array" ? d : [d] ).map(function(i){ var obj = {}; obj[ resultKey ] = i; return obj; }); }else{ data = this.data[node.get("name")] || []; } new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "CMSCategory", "count": node.get("count") || 0, "names": data, "onChange": function(ids){this.savePersonItem(node, ids, null, resultKey);}.bind(this) }); }.bind(this)); formFieldString.each(function(node){ var count = node.get("count") || 0; var dataType = node.get("data-o2-type"); var data = this.data[node.get("name")]; if( dataType && dataType === "string" && o2.typeOf(data) === "string")data = data.split(","); new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { "type": "formField", "count": count, "application": this.process.process.application, "fieldType": "string", "names": data || [], "onChange": function(ids){this.savePersonItem(node, ids, dataType);}.bind(this) }); }.bind(this)); // personDepartmentNodes.each(function(node){ // new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { // "type": "department", // "names": this.data[node.get("name")], // "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) // }); // }.bind(this)); // personCompanyNodes.each(function(node){ // new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { // "type": "company", // "names": this.data[node.get("name")], // "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) // }); // }.bind(this)); // dutyNodes.each(function(node){ // new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.process.designer, { // "type": "duty", // "names": this.data[node.get("name")], // "onChange": function(ids){this.addDutyItem(node, ids);}.bind(this), // "onRemoveDuty": function(item){this.removeDutyItem(node, item);}.bind(this) // }); // }.bind(this)); }.bind(this)); }, removeDutyItem: function(node, item){ if (item.data.id){ var values = JSON.decode(this.data[node.get("name")]) || []; var value = values.filter(function(v){ return v.id == item.data.id; }); value.each(function(v) { values = values.erase(v); }); this.data[node.get("name")] = JSON.encode(values); } item.node.destroy(); MWF.release(item); delete item; }, addDutyItem: function(node, ids){ var value = this.data[node.get("name")] || ""; if (!value) value = "[]"; var values = JSON.decode(value); ids.each(function(id){ if (id.data.dutyId){ for (var i=0; i"+a.data.name }); const input = label.firstChild; if (acts.indexOf(a.data.id)!==-1) input.checked = true; input.addEvent("keydown", function(e){ e.stopPropagation(); }); input.addEvent("change", function(e){ var v = property.getCheckboxValue(id+jsondata); // property.data.taskParticipant.data = JSON.stringify(v); property.data.taskParticipant.data = v; }); input.addEvent("blur", function(e){ var v = property.getCheckboxValue(id+jsondata); // property.data.taskParticipant.data = JSON.stringify(v); property.data.taskParticipant.data = v; }); label.inject(node); }.bind(this)); }.bind(this)); } }, getCheckboxValue: function (name){ var nodes = this.propertyContent.querySelectorAll('input[name="'+name+'"]'); var value = []; nodes.forEach(function(node){ if (node.checked){ value.push(node.value); } }); return value } });