/** * @description 全局功能封装 * @author zr * @type {{registerFileDrop(*, *): void, saveBpmn(Object): void, handleDragOver(*): void, setColor(Object): void, downLoad(Object): void, upload(Object, Object, Object): void, handleFileSelect(*): void, setEncoded(Object, string, string): void, openFromUrl(Object, Object, Object, string): void, createDiagram(string, Object, Object): Promise, getUrlParam: tools.getUrlParam}} */ import $ from 'jquery'; import x2js from 'x2js'; const proHost = window.location.protocol + "//" + window.location.host; const href = window.location.href.split("bpmnjs")[0]; const key = href.split(window.location.host)[1]; const publicurl = proHost + key; //const publicurl='http://localhost:8080'; const $x2j= new x2js() const tools = { registerFileDrop(container, callback) { container.get(0).addEventListener('dragover', tools.handleDragOver, false); container.get(0).addEventListener('drop', tools.handleFileSelect, false); }, handleFileSelect(e) { e.stopPropagation(); e.preventDefault(); var files = e.dataTransfer.files; var file = files[0]; var reader = new FileReader(); reader.onload = function (e) { var xml = e.target.result; callback(xml); }; reader.readAsText(file); }, handleDragOver(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; }, /** * 获取地址栏参数 * @param {string} value */ getUrlParam: function (url) { var object = {}; if (url.indexOf("?") != -1) { var str = url.split("?")[1]; var strs = str.split("&"); for (var i = 0; i < strs.length; i++) { object[strs[i].split("=")[0]] = strs[i].split("=")[1] } return object } return object[url]; }, /** * 通过xml创建bpmn * @param {string} xml 创建bpms xml * @param {object} bpmnModeler bpmn对象 * @param {object} container 容器对象 */ async createDiagram(xml, bpmnModeler, container) { try { await bpmnModeler.importXML(xml); container.removeClass('with-error').addClass('with-diagram'); } catch (err) { container.removeClass('with-diagram').addClass('with-error'); container.find('.error pre').text(err.message); console.error(err); } }, /** * 通过Json设置颜色 * @param {object} json json 字符串 */ setColor(json,bpmnModeler) { var modeling = bpmnModeler.get('modeling'); var elementRegistry = bpmnModeler.get('elementRegistry') var elementToColor = elementRegistry.get(json.name); if(elementToColor){ modeling.setColor([elementToColor], { stroke: json.stroke, fill: json.fill }); } }, /** * 保存bpmn对象 * @param {object} bpmnModeler bpmn对象 */ saveBpmn(bpmnModeler,text) { bpmnModeler.saveXML({ format: true }, function (err, xml) { if (err) { return console.error('保存失败,请重试', err); } console.log(xml) var param={ "deploymentName":text, "stringBPMN":xml } $.ajax({ url: publicurl+'processDefinition/addDeploymentByString', type: 'POST', dataType:"json", data: param, //headers:{'Content-Type':'application/json;charset=utf8'}, success: function (result) { if(result.msg=='成功'){ tools.syhide('alert') alert('保存成功') }else{ alert(result.msg) } }, error: function (err) { console.log(err) } }); }); }, /** * 下载bpmn * @param {object} bpmnModeler bpmn对象 */ downLoad(bpmnModeler) { var downloadLink = $("#saveBpmn") bpmnModeler.saveXML({ format: true }, function (err, xml) { if (err) { return console.error('could not save BPMN 2.0 diagram', err); } tools.setEncoded(downloadLink, 'diagram.bpmn', err ? null : xml); }); }, /** * 转码xml并下载 * @param {object} link 按钮 * @param {string} name 下载名称 * @param {string} data base64XML */ setEncoded(link, name, data) { var encodedData = encodeURIComponent(data); if (data) { link.addClass('active').attr({ 'href': 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData, 'download': name }); } else { link.removeClass('active'); } }, /** * 上传bpmn * @param {object} bpmnModeler bpmn对象 * @param {object} container 容器对象 */ upload(bpmnModeler, container) { var FileUpload = document.myForm.uploadFile.files[0]; var fm = new FormData(); fm.append('processFile', FileUpload); $.ajax({ url: publicurl+'processDefinition/upload', type: 'POST', data: fm, async: false, contentType: false, //禁止设置请求类型 processData: false, //禁止jquery对DAta数据的处理,默认会处理 success: function (result) { var url = publicurl+'bpmn/' + result.obj tools.openFromUrl(bpmnModeler, container, url) }, error: function (err) { console.log(err) } }); }, /** * 打开xml Url 地址 * @param {object} bpmnModeler bpmn对象 * @param {object} container 容器对象 * @param {string} url url地址 */ openFromUrl(bpmnModeler, container, url) { $.ajax(url, { dataType: 'text' }).done(async function (xml) { try { await bpmnModeler.importXML(xml); container.removeClass('with-error').addClass('with-diagram'); } catch (err) { console.error(err); } }); }, /** * 打开弹出框 * @param id */ syopen(id) { var dom = $("#" + id); this.sycenter(dom); dom.addClass(name); dom.show(); var that = this; $(".sy-mask").fadeIn(300) setTimeout(function() { dom.removeClass(name) }, 300); }, /** * 隐藏弹出框 * @param id */ syhide(id) { if (typeof id == "undefined") { var dom = $(".sy-alert") } else { var dom = $("#" + id) } var name = dom.attr("sy-leave"); dom.addClass(name); $(".sy-mask").fadeOut(300); setTimeout(function() { dom.hide(); dom.removeClass(name); }, 300) }, /** * 弹出框居中 * @param dom */ sycenter(dom) { var mgtop = parseFloat(dom.height() / 2); dom.css({ "top": "50%", "margin-top": "-" + mgtop + "px" }) }, /** * 修改camunda为activiti * @param json */ camundaChangeActiviti(xmlfile){ const objXML = xmlfile.replace(/camunda/gi,"activiti"); return objXML; }, /** * 修改activiti为camunda * @param json */ acitvitiChangeCamunda(xmlfile){ const objXML = xmlfile.replace(/activiti/gi,"camunda"); return objXML; }, /** * 判断是否是数组 * @param value * @returns {arg is Array|boolean} */ isArrayFn(value){ if (typeof Array.isArray === "function") { return Array.isArray(value); }else{ return Object.prototype.toString.call(value) === "[object Array]"; } }, /** * 根据数据设置颜色 * @param data * @returns {Array} */ getByColor(data){ var ColorJson=[] for(var i in data){ switch (i) { case "waitingToDo": for(var k in data[i]){ var par={ "name": data[i][k], "stroke":"green", "fill":"yellow" } ColorJson.push(par) } break case "highPoint": for(var k in data[i]){ var par={ "name": data[i][k], "stroke":"gray", "fill":"#eae9e9" } ColorJson.push(par) } break case "iDo": for(var k in data[i]){ var par={ "name": data[i][k], "stroke":"green", "fill":"#a3d68e" } ColorJson.push(par) } break case "highLine": for(var k in data[i]){ var par={ "name": data[i][k], "stroke":"green", "fill":"green" } ColorJson.push(par) } break } } return ColorJson } } export default tools