tools.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. /**
  2. * @description 全局功能封装
  3. * @author zr
  4. * @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<void>, getUrlParam: tools.getUrlParam}}
  5. */
  6. import $ from 'jquery';
  7. const proHost = window.location.protocol + "//" + window.location.host;
  8. const href = window.location.href.split("bpmnjs")[0];
  9. const key = href.split(window.location.host)[1];
  10. const publicurl = proHost + key;
  11. const tools = {
  12. registerFileDrop(container, callback) {
  13. container.get(0).addEventListener('dragover', tools.handleDragOver, false);
  14. container.get(0).addEventListener('drop', tools.handleFileSelect, false);
  15. },
  16. /**
  17. * 获取地址栏参数
  18. * @param {string} value
  19. */
  20. getUrlParam: function (url) {
  21. var object = {};
  22. if (url.indexOf("?") != -1) {
  23. var str = url.split("?")[1];
  24. var strs = str.split("&");
  25. for (var i = 0; i < strs.length; i++) {
  26. object[strs[i].split("=")[0]] = strs[i].split("=")[1]
  27. }
  28. return object
  29. }
  30. return object[url];
  31. },
  32. /**
  33. * 通过xml创建bpmn
  34. * @param {string} xml 创建bpms xml
  35. * @param {object} bpmnModeler bpmn对象
  36. * @param {object} container 容器对象
  37. */
  38. async createDiagram(xml, bpmnModeler, container) {
  39. try {
  40. await bpmnModeler.importXML(xml);
  41. container.removeClass('with-error').addClass('with-diagram');
  42. } catch (err) {
  43. container.removeClass('with-diagram').addClass('with-error');
  44. container.find('.error pre').text(err.message);
  45. console.error(err);
  46. }
  47. },
  48. /**
  49. * 通过Json设置颜色
  50. * @param {object} json json 字符串
  51. */
  52. setColor(json,bpmnModeler) {
  53. var modeling = bpmnModeler.get('modeling');
  54. var elementRegistry = bpmnModeler.get('elementRegistry')
  55. var elementToColor = elementRegistry.get(json.name);
  56. if(elementToColor){
  57. modeling.setColor([elementToColor], {
  58. stroke: json.stroke,
  59. fill: json.fill
  60. });
  61. }
  62. },
  63. /**
  64. * 保存bpmn对象
  65. * @param {object} bpmnModeler bpmn对象
  66. */
  67. saveBpmn(bpmnModeler) {
  68. bpmnModeler.saveXML({ format: true }, function (err, xml) {
  69. if (err) {
  70. return console.error('保存失败,请重试', err);
  71. }
  72. console.log(xml)
  73. var param={
  74. "stringBPMN":xml
  75. }
  76. $.ajax({
  77. url: localStorage.getItem("VUE_APP_BASE_API")+'/processDefinition/addDeploymentByString',
  78. type: 'POST',
  79. dataType:"json",
  80. data: param,
  81. //headers:{'Content-Type':'application/json;charset=utf8'},
  82. success: function (result) {
  83. if(result.code===200){
  84. tools.syhide('alert')
  85. }else{
  86. alert(result.msg)
  87. }
  88. },
  89. error: function (err) {
  90. console.log(err)
  91. }
  92. });
  93. });
  94. },
  95. /**
  96. * 下载bpmn
  97. * @param {object} bpmnModeler bpmn对象
  98. */
  99. downLoad(bpmnModeler) {
  100. var downloadLink = $("#downloadBpmn")
  101. bpmnModeler.saveXML({ format: true }, function (err, xml) {
  102. if (err) {
  103. return console.error('could not save BPMN 2.0 diagram', err);
  104. }
  105. tools.setEncoded(downloadLink, 'diagram.bpmn', err ? null : xml);
  106. });
  107. },
  108. /**
  109. * 转码xml并下载
  110. * @param {object} link 按钮
  111. * @param {string} name 下载名称
  112. * @param {string} data base64XML
  113. */
  114. setEncoded(link, name, data) {
  115. var encodedData = encodeURIComponent(data);
  116. if (data) {
  117. link.addClass('active').attr({
  118. 'href': 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData,
  119. 'download': name
  120. });
  121. } else {
  122. link.removeClass('active');
  123. }
  124. },
  125. /**
  126. * 上传bpmn
  127. * @param {object} bpmnModeler bpmn对象
  128. * @param {object} container 容器对象
  129. */
  130. upload(bpmnModeler, container) {
  131. var FileUpload = document.myForm.uploadFile.files[0];
  132. var fm = new FormData();
  133. fm.append('processFile', FileUpload);
  134. $.ajax({
  135. url: localStorage.getItem("VUE_APP_BASE_API")+'/processDefinition/upload',
  136. // url: 'http://localhost:8080/processDefinition/upload',
  137. type: 'POST',
  138. data: fm,
  139. async: false,
  140. contentType: false, //禁止设置请求类型
  141. processData: false, //禁止jquery对DAta数据的处理,默认会处理
  142. success: function (result) {
  143. var url = result.data.substr(0,4)=="http"?result.data:localStorage.getItem("VUE_APP_BASE_API")+ result.data
  144. tools.openFromUrl(bpmnModeler, container, url)
  145. },
  146. error: function (err) {
  147. console.log(err)
  148. }
  149. });
  150. },
  151. /**
  152. * 打开xml Url 地址
  153. * @param {object} bpmnModeler bpmn对象
  154. * @param {object} container 容器对象
  155. * @param {string} url url地址
  156. */
  157. openFromUrl(bpmnModeler, container, url) {
  158. $.ajax(url, { dataType: 'text' }).done(async function (xml) {
  159. try {
  160. await bpmnModeler.importXML(xml);
  161. container.removeClass('with-error').addClass('with-diagram');
  162. } catch (err) {
  163. console.error(err);
  164. }
  165. });
  166. },
  167. /**
  168. * 打开弹出框
  169. * @param id
  170. */
  171. syopen(id) {
  172. var dom = $("#" + id);
  173. this.sycenter(dom);
  174. dom.addClass(name);
  175. dom.show();
  176. var that = this;
  177. $(".sy-mask").fadeIn(300)
  178. setTimeout(function() {
  179. dom.removeClass(name)
  180. }, 300);
  181. },
  182. /**
  183. * 隐藏弹出框
  184. * @param id
  185. */
  186. syhide(id) {
  187. if (typeof id == "undefined") {
  188. var dom = $(".sy-alert")
  189. } else {
  190. var dom = $("#" + id)
  191. }
  192. var name = dom.attr("sy-leave");
  193. dom.addClass(name);
  194. $(".sy-mask").fadeOut(300);
  195. setTimeout(function() {
  196. dom.hide();
  197. dom.removeClass(name);
  198. }, 300)
  199. },
  200. /**
  201. * 弹出框居中
  202. * @param dom
  203. */
  204. sycenter(dom) {
  205. var mgtop = parseFloat(dom.height() / 2);
  206. dom.css({
  207. "top": "50%",
  208. "margin-top": "-" + mgtop + "px"
  209. })
  210. },
  211. /**
  212. * 判断是否是数组
  213. * @param value
  214. * @returns {arg is Array<any>|boolean}
  215. */
  216. isArrayFn(value){
  217. if (typeof Array.isArray === "function") {
  218. return Array.isArray(value);
  219. }else{
  220. return Object.prototype.toString.call(value) === "[object Array]";
  221. }
  222. },
  223. /**
  224. * 根据数据设置颜色
  225. * @param data
  226. * @returns {Array}
  227. */
  228. getByColor(data){
  229. var ColorJson=[]
  230. for(var k in data['highLine']){
  231. var par={
  232. "name": data['highLine'][k],
  233. "stroke":"green",
  234. "fill":"green"
  235. }
  236. ColorJson.push(par)
  237. }
  238. for(var k in data['highPoint']){
  239. var par={
  240. "name": data['highPoint'][k],
  241. "stroke":"gray",
  242. "fill":"#eae9e9"
  243. }
  244. ColorJson.push(par)
  245. }
  246. for(var k in data['iDo']){
  247. var par={
  248. "name": data['iDo'][k],
  249. "stroke":"green",
  250. "fill":"#a3d68e"
  251. }
  252. ColorJson.push(par)
  253. }
  254. for(var k in data['waitingToDo']){
  255. var par={
  256. "name": data['waitingToDo'][k],
  257. "stroke":"green",
  258. "fill":"yellow"
  259. }
  260. ColorJson.push(par)
  261. }
  262. return ColorJson
  263. }
  264. }
  265. export default tools