zentaobiz.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. window.fetchChartApi = createLink('screen', 'ajaxGetChart');
  2. window.fetchDataApi = createLink('screen', 'ajaxGetTreeData', 'screenID=' + screen.id);
  3. window.fetchMetricDataApi = createLink('screen', 'ajaxGetMetricData');
  4. window.fetchFilterOptionsApi = createLink('screen', 'ajaxGetFilterOptions');
  5. if(!window.loadPage)
  6. {
  7. window.loadPage = function(url)
  8. {
  9. parent.loadPage(url);
  10. }
  11. }
  12. function saveAsDraft(storageInfo, fileDataUrl)
  13. {
  14. save(storageInfo, 'draft', fileDataUrl);
  15. }
  16. function saveAsPublish(storageInfo, fileDataUrl)
  17. {
  18. window.storageInfo = storageInfo;
  19. window.fileDataUrl = fileDataUrl;
  20. exitFullScreen();
  21. $('#publish').trigger('click');
  22. }
  23. function save(storageInfo, status, fileDataUrl)
  24. {
  25. var fileName = 'screen_thumbnail_' + screen.id;
  26. var blob = dataURLToBlob(fileDataUrl);
  27. var formData = new FormData();
  28. formData.append('thumbnail', blob, fileName + '.png');
  29. formData.append('scheme', JSON.stringify(storageInfo));
  30. formData.append('status', status);
  31. formData.append('uuid', fileName);
  32. $.ajax({
  33. url: createLink('screen', 'design', 'screenID=' + screen.id),
  34. type: 'POST',
  35. data: formData,
  36. async: false,
  37. cache: false,
  38. contentType: false,
  39. processData: false,
  40. success: function(resp)
  41. {
  42. resp = JSON.parse(resp);
  43. zuiMessage(resp.result, resp.message);
  44. if(resp.result == 'success')
  45. {
  46. setTimeout(function()
  47. {
  48. exitFullScreen();
  49. loadPage(resp.locate);
  50. }, 2000);
  51. }
  52. }
  53. });
  54. }
  55. function backBrowse()
  56. {
  57. exitFullScreen();
  58. loadPage(backLink);
  59. }
  60. // 将数据 URL 转换为 Blob 对象的函数
  61. function dataURLToBlob(dataURL) {
  62. const arr = dataURL.split(',');
  63. const mime = arr[0].match(/:(.*?);/)[1];
  64. const bstr = atob(arr[1]);
  65. let n = bstr.length;
  66. const u8arr = new Uint8Array(n);
  67. while (n--) {
  68. u8arr[n] = bstr.charCodeAt(n);
  69. }
  70. return new Blob([u8arr], { type: mime });
  71. }
  72. /**
  73. * Zui messager alert.
  74. *
  75. * @param string result success|fail
  76. * @param string mes
  77. * @access public
  78. * @return void
  79. */
  80. function zuiMessage(result, mes)
  81. {
  82. var icon = result == 'success' ? 'check-circle' : 'exclamation-sign';
  83. var type = result == 'success' ? 'success' : 'danger';
  84. var message = new $.zui.Messager(mes,
  85. {
  86. html: true,
  87. icon: icon,
  88. type: type,
  89. close: true,
  90. });
  91. message.show();
  92. }
  93. /**
  94. * Display the kanban in full screen.
  95. *
  96. * @access public
  97. * @return void
  98. */
  99. function fullScreen()
  100. {
  101. var element = document.getElementById('screenContainer');
  102. var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
  103. if(requestMethod)
  104. {
  105. var afterEnterFullscreen = function()
  106. {
  107. $.cookie('isFullScreen', 1);
  108. }
  109. var whenFailEnterFullscreen = function()
  110. {
  111. exitFullScreen();
  112. }
  113. try
  114. {
  115. var result = requestMethod.call(element);
  116. if(result && (typeof result.then === 'function' || result instanceof window.Promise))
  117. {
  118. result.then(afterEnterFullscreen).catch(whenFailEnterFullscreen);
  119. }
  120. else
  121. {
  122. afterEnterFullscreen();
  123. }
  124. }
  125. catch (error)
  126. {
  127. whenFailEnterFullscreen(error);
  128. }
  129. }
  130. }
  131. /**
  132. * Exit full screen.
  133. *
  134. * @access public
  135. * @return void
  136. */
  137. function exitFullScreen()
  138. {
  139. $.cookie('isFullScreen', 0);
  140. let exitFullScreen = document.exitFullScreen ||
  141. document.mozCancelFullScreen ||
  142. document.webkitExitFullscreen ||
  143. document.msExitFullscreen;
  144. if (exitFullScreen) {
  145. exitFullScreen.call(document);
  146. }
  147. }
  148. document.addEventListener('fullscreenchange', function (e)
  149. {
  150. if(!document.fullscreenElement) exitFullScreen();
  151. });
  152. document.addEventListener('webkitfullscreenchange', function (e)
  153. {
  154. if(!document.webkitFullscreenElement) exitFullScreen();
  155. });
  156. document.addEventListener('mozfullscreenchange', function (e)
  157. {
  158. if(!document.mozFullScreenElement) exitFullScreen();
  159. });
  160. document.addEventListener('msfullscreenChange', function (e)
  161. {
  162. if(!document.msfullscreenElement) exitFullScreen();
  163. });